Django:使ModelForm中的某些字段为required=False

Django:使ModelForm中的某些字段为required=False,django,forms,field,required,modelform,Django,Forms,Field,Required,Modelform,如何使ModelForm中的某些字段required=False 如果我有: class ThatForm(ModelForm): class Meta: widgets = {"text": Textarea(required=False)} 或者如果我有: class ThatForm(ModelForm): text = Textarea(required=False) Django返回: __init__() got an unexpected keyword arg

如何使ModelForm中的某些字段required=False

如果我有:

class ThatForm(ModelForm):
  class Meta:
    widgets = {"text": Textarea(required=False)}
或者如果我有:

class ThatForm(ModelForm):
  text = Textarea(required=False)
Django返回:

__init__() got an unexpected keyword argument 'required'

以下是评论。可能是的:

class ThatForm(ModelForm):
    def __init__(self, *args, **kwargs):
        # first call parent's constructor
        super(ThatForm, self).__init__(*args, **kwargs)
        # there's a `fields` property now
        self.fields['desired_field_name'].required = False

以下可能是合适的

class ThatForm(ModelForm):
    text = forms.CharField(required=False, widget=forms.Textarea)

您应该将
blank=True
添加到相应的模型中

如果模型字段为blank=True,则表单字段上的required设置为False。否则,required=True

也可以看到它本身。

您可以尝试以下方法:

class ThatForm(ModelForm):
  class Meta:
    requireds = 
    {
       'text':False,
    }

requireds必须在Meta下。

当我们需要在一组字段上设置required选项时,我们可以:

class ThatForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        for field in self.Meta.required:
            self.fields[field].required = True

    class Meta:
        model = User
        fields = (
            'email',
            'first_name',
            'last_name',
            'address',
            'postcode',
            'city',
            'state',
            'country',
            'company',
            'tax_id',
            'website',
            'service_notifications',
        )
        required = (
            'email',
            'first_name',
            'last_name',
            'address',
            'postcode',
            'city',
            'country',
        )

没有名为
TextArea
的表单字段类型,您必须使用
字段的祖先,可能是名为
CharField
并添加
TextArea
widget的字段,在不定义静态字段和/或小部件类型的情况下,是否可以将字段设置为required=False?这可能是可接受的答案,因为这是
blank
的目的。这并不总是解决方案:想象一下你在模型中有一个必填字段,但您希望在有或没有此限制的情况下搜索该类型的对象。然后您希望表单允许不带该属性的搜索。例如,您在模型中将颜色作为必填字段,但您可能希望搜索具有特定形状的对象,而不考虑颜色。没有解决方案始终是解决方案。但我提出的解决方案是最好的实践,除非你的情况不寻常(如你提到的那样)。在这种情况下,一个单独的SO问题是有意义的。但是OP没有提到任何这样的情况,这个问题很一般,所以应该是答案。不,这个解决方案是特殊的解决方案,这是一个非常常见的情况,你有一个带有一些必填字段的模型,例如。G带有街道、城市、国家/地区的地址都是必填的,但您只想使用表单(ModelForm)搜索部分字段,例如。G只有城市和乡村。我也这样理解OP。您的解决方案对我来说非常明显,您将模型字段定义为blank=True(有时与null=True组合使用)仅在特殊情况下有效。一般的答案是yedpodtrzitko的答案。你真的用过这个吗?因为我在Django文档或源代码中看不到这样做的迹象。@用户我不知道,但也许官方Django文档可以做到:一切都像一个符咒@SandeepBalagopal您能解释到底是什么出错并显示错误吗?尝试了这个,字段并不是必需的。如果你查看modelform中的选项,modelform没有这样的选项@SandeepBalagopal,你想告诉大家这里投票的人和这里投票的人是错误的吗?我没有注意到你覆盖的init方法。它起作用了。很抱歉弄错了。@您可能会说“我相信默认情况下ModelForm中的所有字段都是必需的”。但并非全部。模型表单上需要天气场,这取决于其模型上的场参数。有时,我们需要通过使非必填字段为required来覆盖这种行为。