web-dev-qa-db-ja.com

Django:ModelFormの特定のフィールドをrequired = Falseにする

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'
25
Synthead

コメントから。おそらくそうだ:

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
41
yedpodtrzitko

対応するモデルにblank = Trueを追加する必要があります

ドキュメントによると

モデルフィールドにblank = Trueがある場合、フォームフィールドでrequiredはFalseに設定されます。それ以外の場合、required = True。

空白のドキュメント 自体も参照してください。

23
rioted

必要なオプションを一連のフィールドに設定する必要がある場合、次のことができます。

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',
        )
7
Valery Ramusik

以下が適切かもしれません

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