Django 即使不在字段中,也包括ModelForm字段
我有以下型号:Django 即使不在字段中,也包括ModelForm字段,django,django-forms,django-admin,Django,Django Forms,Django Admin,我有以下型号: class Test(models.Model): name = models.CharField(max_length=100) 和管理员: class TestForm(forms.ModelForm): confirm_name = forms.CharField(max_length=100) ... @admin.register(Test) class TestAdmin(admin.ModelAdmin): form = TestForm
class Test(models.Model):
name = models.CharField(max_length=100)
和管理员:
class TestForm(forms.ModelForm):
confirm_name = forms.CharField(max_length=100)
...
@admin.register(Test)
class TestAdmin(admin.ModelAdmin):
form = TestForm
fields = ('name',)
create_fields = ('name', 'confirm_name')
def get_fields(self, request, obj=None):
fields = super().get_fields(request, obj)
if not obj:
fields = self.create_fields
return fields
一切正常。但是,当您添加一条记录,然后尝试编辑它时,我会得到错误“请更正下面的错误”,而不显示任何字段错误。我检查了表单错误,它说确认名称不应该为空。如果未添加到字段中,为什么仍包含它?您需要使用
add\u form
而不是get\u fields
在你的例子中
class CreateTestForm(forms.ModelForm):
name=models.CharField(最大长度=100)
确认\u name=models.CharField(最大长度=100)
#.... 您的验证逻辑
类UpdateTestForm(forms.ModelForm):
name=models.CharField(最大长度=100)
在您的admin.py
@管理员注册(测试)
类TestAdmin(admin.ModelAdmin):
form=TestForm
add_form=CreateTest
def get_表单(自我、请求、obj=None、**kwargs):
"""
在测试创建期间使用特殊表单
"""
默认值={}
如果obj为无:
默认值['form']=self.add\u表单
默认值。更新(kwargs)
return super().get_表单(请求、对象、**默认值)
管理员表单的字段中的学分来自TestForm
class TestForm(forms.ModelForm):
confirm_name = forms.CharField(max_length=100)
您可以使用:
class CreateTestForm(forms.ModelForm):
confirm_name = forms.CharField(max_length=100)
class Meta:
model = Model
field = ('name', 'confirm_name')
class UpdateTestForm(forms.ModelForm):
class Meta:
model = Model
field = ('name',)
@admin.register(Test)
class TestAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, change=False, **kwargs):
if obj:
kwargs['form'] = UpdateTestForm
else:
kwargs['form'] = CreateTestForm
return super().get_form(request, obj, change, **kwargs)
因为它是表单的一个字段。你可能想用它来确认一下。如果要使其成为可选的,可以在
forms.CharField(..)
中写入required=False
,但这会使该字段成为非必需字段,用户可以忽略它。这是一个必填字段。所以您希望在创建时使用它,而在编辑时不使用它吗?完全正确。创建时,您必须输入两次名称以避免错误。谢谢!我本想给你们投票,但我是新来的,还不能投票。