2017-07-03 48 views
4

考慮這個Django模塊管理員添加表單卡住

@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) 

的第一次嘗試creatingchanging一個對象,它會正常工作。 但是,之後你create對象,每一次嘗試change對象時,你會得到的add_form代替form

我固定,通過添加一個else塊

@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) 

好像有某種class緩存。

任何人都知道爲什麼?

+0

...並且工作順利。 – slackmart

回答

3

Django中的所有模板都是模板。將自定義表單分配給管理站點表單時,不僅要更改django如何接收數據的功能,還要更改每個請求中使用的模板,因此,在第一次創建和更新時可以,但是一旦您將默認使用的自定義窗體分配給窗體的操作。有必要考慮這兩種情況,因此有必要重新分配您正在使用的默認模板(表單),而不是保留在之前的模板(add_form)中。這在內部做Django。參考https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1006

注:如果您使用自定義窗體不使用「表格」變量reassing自定義窗體,而不是形成我已經試過沒有覆蓋`get_form`方法使用change_form

@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) 
相關問題