2017-07-03 49 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) 
相关问题