2009-12-10 16 views
5

Mam dwa modele: Event i Series, gdzie każde wydarzenie należy do Serii. W większości przypadków wydarzenie start_time jest identyczne z serią "default_time.Prepopulowanie rzędów na podstawie modelu nadrzędnego w Django Admin

Oto obnażona wersja modeli.

Używam inlines w aplikacji administratora, dzięki czemu mogę edytować wszystkie wydarzenia dla serii na raz.

Jeśli seria została już utworzona, chcę wstępnie wypełnić start_time dla każdego zdarzenia inline z serią "default_time. Do tej pory utworzyłem formularz administracyjny modelu dla wydarzenia i użyłem opcji initial, aby wstępnie wypełnić pole czasu o ustalonym czasie.

#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,] 

Nie jestem pewien, jak przejść dalej. Czy możliwe jest przedłużenie kodu tak, aby początkowa wartość dla pola start_time to seria "default_time?

+0

zobacz: http://stackoverflow.com/questions/442040/pre-populate-an-inline-formset –

Odpowiedz

0

myślę, że trzeba, aby zamknąć funkcję nad 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 

Oto seria będzie wystąpienie series. Następnie w klasie inline admin:

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) 

EDIT: Takie podejście pozwoli Ci zdać przedmiot series do formularza gdzie można go użyć do ustawienia domyślne dla danej dziedzinie.

+0

Niestety, nie rozumiem odpowiedzi. Gdzie mam podłączyć funkcję create_foo_form do administratora Django? – Alasdair

+0

Po prostu utwórz funkcję w dowolnym miejscu przed swoją klasą modeladmin w module administracyjnym. – shanyu

+0

Próbowałem opracować moją odpowiedź, mam nadzieję, że to pomoże w tym czasie .. – shanyu

Powiązane problemy