2009-12-10 9 views
5

J'ai deux modèles, Event et Series, où chaque événement appartient à une série. La plupart du temps, un événement start_time est le même que celui de sa série default_time.Prépopulation d'inlines basée sur le modèle parent dans Django Admin

Voici une version allégée des modèles. J'utilise des inlines dans l'application d'administration, de sorte que je peux éditer tous les événements pour une série à la fois.

Si une série a déjà été créée, je souhaite préremplir le start_time pour chaque événement en ligne avec la série default_time. Jusqu'à présent, j'ai créé un formulaire d'administration de modèle pour l'événement, et utilisé l'option initial pour préremplir le champ de temps avec un temps fixe.

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

Je ne sais pas comment procéder à partir d'ici. Est-il possible d'étendre le code, de sorte que la valeur initiale pour le champ start_time est la série default_time?

+0

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

Répondre

0

Je pense que vous devez fermer une fonction sur une 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 

Ici série sera l'instance series. Ensuite, dans la classe d'administration en ligne:

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: Cette approche vous permettra de passer votre objet series à la forme où vous pouvez l'utiliser pour définir une valeur par défaut pour votre domaine.

+0

Désolé, je ne comprends pas la réponse. Où puis-je accrocher la fonction create_foo_form dans l'admin Django? – Alasdair

+0

Il suffit de créer la fonction n'importe où avant votre classe modeladmin dans le module d'administration. – shanyu

+0

J'ai essayé d'élaborer sur ma réponse, j'espère que cela aide cette fois-ci .. – shanyu

Questions connexes