django model admin 添加表单卡住了
django model admin add form gets stuck
考虑一下
@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)
第一次尝试 creating
或 changing
对象时,它会正常工作。
但是,在 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
缓存。
有人知道为什么吗?
Django 中都是模板。将自定义表单分配给管理站点表单时,不仅会更改 django 接收数据的功能,还会更改每个请求中使用的模板,因此第一次创建和更新时没问题,但是一旦您分配自定义表单,默认情况下用于表单的操作。有必要考虑这两种情况,因此有必要重新分配您正在使用的默认模板(表单),而不是保留在以前的模板中(add_form)。这在 Django 内部进行。参考 https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1006
注意:如果您使用自定义表单,请不要使用 "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)
考虑一下
@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)
第一次尝试 creating
或 changing
对象时,它会正常工作。
但是,在 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
缓存。
有人知道为什么吗?
Django 中都是模板。将自定义表单分配给管理站点表单时,不仅会更改 django 接收数据的功能,还会更改每个请求中使用的模板,因此第一次创建和更新时没问题,但是一旦您分配自定义表单,默认情况下用于表单的操作。有必要考虑这两种情况,因此有必要重新分配您正在使用的默认模板(表单),而不是保留在以前的模板中(add_form)。这在 Django 内部进行。参考 https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1006
注意:如果您使用自定义表单,请不要使用 "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)