2009-12-10 5 views
5

Ich habe zwei Modelle, Event und Series, wo jedes Ereignis zu einer Serie gehört. Meistens ist die start_time eines Ereignisses die gleiche wie die seiner Serie default_time.Pre-Population Inlines basierend auf dem übergeordneten Modell in der Django Admin

Hier ist eine abgespeckte Version der Modelle.

Ich verwende Inline in der Admin-Anwendung, so dass ich alle Ereignisse für eine Serie auf einmal bearbeiten kann.

Wenn bereits eine Serie erstellt wurde, möchte ich die start_time für jedes Inline-Ereignis mit der Serie 'default_time vorbelegen. Bisher habe ich ein Model-Admin-Formular für Event erstellt und die Option initial verwendet, um das Zeitfeld mit einer festen Zeit vorzufüllen.

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

Ich bin nicht sicher, wie Sie von hier fortfahren. Ist es möglich, den Code zu erweitern, so dass der Anfangswert für das Feld start_time die Serie default_time ist?

+0

siehe dies: http://StackOverflow.com/Questions/442040/pre-populate-an-inline-formset –

Antwort

0

Ich glaube, Sie brauchen eine Funktion über einen Modeladmin schließen:

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 

Hier Reihe der series Instanz sein. dann in der Inline-Admin-Klasse:

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: Dieser Ansatz ermöglicht es Ihnen, Ihre series Objekt in das Formular übergeben, wo Sie es verwenden, können eine Standard für Ihren Bereich zu setzen.

+0

Sorry, ich verstehe die Antwort nicht. Wo hake ich die create_foo_form Funktion in den Django Admin? – Alasdair

+0

Erstellen Sie einfach die Funktion irgendwo vor Ihrer Klasse modeladmin im Admin-Modul. – shanyu

+0

Ich habe versucht, auf meine Antwort zu erarbeiten, hoffe, es hilft diesmal .. – shanyu

Verwandte Themen