在Django中,为什么模型中blank=True不使表单字段成为非强制性字段?
在django文档中,有信息表明,通过将CharField类型的模型字段声明为blank=True,表单将不需要填写相应的字段。但是,在我的项目中,该字段不起作用。为了使表单中的字段不是强制性的,我找到的唯一替代方法是将其定义为required=False。 我正在使用Django3.0.2 如果表单没有在blank=True的模型中定义字段,则不存在错误。但是,如果表单有这个字段,那么只有在我将required=False添加到表单字段时,它才起作用,否则它将是强制的,即使它是在模型中用blank=True定义的 Django 2.2中的行为相同在Django中,为什么模型中blank=True不使表单字段成为非强制性字段?,django,Django,在django文档中,有信息表明,通过将CharField类型的模型字段声明为blank=True,表单将不需要填写相应的字段。但是,在我的项目中,该字段不起作用。为了使表单中的字段不是强制性的,我找到的唯一替代方法是将其定义为required=False。 我正在使用Django3.0.2 如果表单没有在blank=True的模型中定义字段,则不存在错误。但是,如果表单有这个字段,那么只有在我将required=False添加到表单字段时,它才起作用,否则它将是强制的,即使它是在模型中用bla
Django 1.11.17中的相同行为我的问题的答案如下: 假设您定义了以下类:
class Client (models.Model):
name = models.CharField (max_length=100, blank=True)
address = models.CharField (max_length=100, blank=False)
如果表单类的定义如下:
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
widgets = {
'name': forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
'address': forms.TextInput (attrs = {'class': 'form-control form-control-sm'})
}
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
name = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
address = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
然后,“名称”字段将不是强制性的(因为模型中为空=真),而“地址”字段将是强制性的(因为模型中为空=假)
但是,如果ClientForm类的定义如下:
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
widgets = {
'name': forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
'address': forms.TextInput (attrs = {'class': 'form-control form-control-sm'})
}
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
name = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
address = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
然后,这两个字段('name'和'address')都是必填字段,”,因为以声明方式定义的字段保留为“()”,即表单字段“required”属性的默认值为True,这将要求填写字段“name”和“address”,即使在模型中,该字段已设置为blank=True。我想您在阅读本文后会得到答案。谢谢,但我已经看过这篇文章。在python控制台中,对模型类的名称字段使用blank=True和default=''可以实例化一个对象(无需为名称字段提供值)并使用save()方法将其保存到数据库中,但如果我尝试使用不包含required=False的表单字段执行相同的操作,django需要填写name字段。非常感谢!你可能帮我省去了几个小时的挫折。