2017-07-03 5 views
4

Betrachten Sie diesedjango Admin Form klemmt hinzufügen Modell

@admin.register(Personal, site=admin_site) 
class PersonalAdmin(admin.ModelAdmin): 
    form = ChangePersonalForm 
    add_form = AddPersonalForm 

    def get_form(self, request, obj=None, **kwargs): 
     if not obj: 
      self.form = self.add_form 

     return super(PersonalAdmin, self).get_form(request, obj, **kwargs) 

Sie zum ersten Mal creating oder changing ein Objekt versuchen, wird es gut funktionieren. Aber nachdem Sie create das Objekt, jedes Mal, wenn Sie versuchen, change ein Objekt, werden Sie die add_form anstelle dem form

bekommen ich, dass

@admin.register(Personal, site=admin_site) 
class PersonalAdmin(admin.ModelAdmin): 
    change_form = ChangePersonalForm 
    add_form = AddPersonalForm 

    def get_form(self, request, obj=None, **kwargs): 
     if not obj: 
      self.form = self.add_form 
     else: 
      self.form = self.change_form 

     return super(PersonalAdmin, self).get_form(request, obj, **kwargs) 

durch Zugabe von Block einer anderen Fest Als ob es eine Art von class Caching.

Wer weiß warum?

+0

Ich habe versucht, ohne die 'get_form' Methode überschreiben ... und es funktioniert reibungslos. – slackmart

Antwort

3

Alle in Django sind Vorlagen. Wenn Sie dem Admin-Site-Formular ein benutzerdefiniertes Formular zuweisen, ändern Sie nicht nur die Funktionalität, wie django die Daten empfängt, sondern auch die Vorlage, die in jeder Anfrage verwendet wird. Wenn Sie also zum ersten Mal erstellen und aktualisieren, ist das in Ordnung das benutzerdefinierte Formular zugewiesen, das standardmäßig für Aktionen des Formulars verwendet wird. Es ist notwendig, die beiden Fälle zu betrachten, in denen es notwendig ist, die von Ihnen verwendete Standardvorlage (Formular) neu zuzuweisen und nicht in der vorherigen Vorlage (add_form) zu verbleiben. Dies macht Django intern. Ref https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1006

Hinweis: Wenn Sie ein benutzerdefiniertes Formular verwenden, nicht "Form" Variable verwenden ein benutzerdefiniertes Formular reassing, statt Verwendung change_form bilden

@admin.register(Personal, site=admin_site) 
class PersonalAdmin(admin.ModelAdmin): 
    change_form = ChangePersonalForm 
    add_form = AddPersonalForm 

    def get_form(self, request, obj=None, **kwargs): 
     if not obj: 
      self.form = self.add_form 
     else: 
      self.form = self.change_form 

     return super(PersonalAdmin, self).get_form(request, obj, **kwargs) 
Verwandte Themen