2009-12-10 3 views
5

EventSeries의 두 가지 모델이 있습니다. 각 이벤트는 Series에 속합니다. 대부분의 경우 이벤트 start_time은 시리즈 'default_time과 동일합니다.Django 관리자의 상위 모델을 기반으로 인라인 미리 채우기

다음은 모델의 버전입니다. 나는 한 번에 시리즈에 대한 모든 이벤트를 편집 할 수 있도록

#models.py 

class Series(models.Model): 
    name = models.CharField(max_length=50) 
    default_time = models.TimeField() 

class Event(models.Model): 
    name = models.CharField(max_length=50) 
    date = models.DateField() 
    start_time = models.TimeField() 
    series = models.ForeignKey(Series) 

나는, 관리자 응용 프로그램에서 인라인을 사용합니다.

시리즈가 이미 생성 된 경우 시리즈 'default_time이있는 각 인라인 이벤트에 대해 start_time을 미리 채워야합니다. 지금까지 Event에 대한 모델 관리 양식을 만들고 initial 옵션을 사용하여 고정 시간으로 시간 필드를 미리 채 웁니다.

#admin.py 
... 
import datetime 

class OEventInlineAdminForm(forms.ModelForm): 
    start_time = forms.TimeField(initial=datetime.time(18,30,00)) 
    class Meta: 
     model = OEvent 

class EventInline(admin.TabularInline): 
    form = EventInlineAdminForm 
    model = Event 

class SeriesAdmin(admin.ModelAdmin): 
    inlines = [EventInline,] 

여기부터 진행하는 방법을 모르겠다. start_time 필드의 초기 값이 Series 'default_time이되도록 코드를 확장 할 수 있습니까?

+0

다음을 참조하십시오 : http://stackoverflow.com/questions/442040/pre-populate-an-inline-formset –

답변

0

나는 당신이 ModelAdmin 통해 기능을 닫을 필요가 있다고 생각 :

여기
def create_event_form(series): 
    class EventForm(forms.ModelForm): 
     def __init__(self, *args, **kwargs): 
      # You can use the outer function's 'series' here 
    return EventForm 

시리즈는 series 인스턴스가 될 것입니다. 다음 인라인 관리 클래스 :

class EventInlineAdmin(admin.TabularInline): 
    model = Event 
    def get_formset(self, request, obj=None, **kwargs): 
     if obj: 
      self.form = create_foo_form(obj) 
     return super(EventInlineAdmin, self).get_formset(request, obj, **kwargs) 

편집 : 당신은 당신의 분야에 대한 기본을 설정하는 데 사용할 수있는이 방법 양식에 series 개체를 전달할 수있게됩니다.

+0

죄송합니다, 그 답을 이해하지 못합니다. create_foo_form 함수를 장고 관리자에게 연결하려면? – Alasdair

+0

admin 모듈에서 modeladmin 클래스 앞에있는 함수를 작성하십시오. – shanyu

+0

나는 내 대답에 대해 정교하게 노력했다.이 시간이 도움이되기를 바란다. – shanyu

관련 문제