Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中,为什么模型中blank=True不使表单字段成为非强制性字段?_Django - Fatal编程技术网

在Django中,为什么模型中blank=True不使表单字段成为非强制性字段?

在Django中,为什么模型中blank=True不使表单字段成为非强制性字段?,django,Django,在django文档中,有信息表明,通过将CharField类型的模型字段声明为blank=True,表单将不需要填写相应的字段。但是,在我的项目中,该字段不起作用。为了使表单中的字段不是强制性的,我找到的唯一替代方法是将其定义为required=False。 我正在使用Django3.0.2 如果表单没有在blank=True的模型中定义字段,则不存在错误。但是,如果表单有这个字段,那么只有在我将required=False添加到表单字段时,它才起作用,否则它将是强制的,即使它是在模型中用bla

在django文档中,有信息表明,通过将CharField类型的模型字段声明为blank=True,表单将不需要填写相应的字段。但是,在我的项目中,该字段不起作用。为了使表单中的字段不是强制性的,我找到的唯一替代方法是将其定义为required=False。 我正在使用Django3.0.2

如果表单没有在blank=True的模型中定义字段,则不存在错误。但是,如果表单有这个字段,那么只有在我将required=False添加到表单字段时,它才起作用,否则它将是强制的,即使它是在模型中用blank=True定义的

Django 2.2中的行为相同


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字段。非常感谢!你可能帮我省去了几个小时的挫折。