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'

Ответы

Ответ 1

после комментариев. Вероятно, да:

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

Ответ 2

Вы должны добавить blank=True к соответствующей модели

В документации написано

Если поле модели имеет пустое value = True, то для поля формы требуется значение False. В противном случае требуется = True.

Также смотрите документацию для самого бланка.

Ответ 3

Когда нам нужно установить обязательную опцию для нескольких полей, мы можем:

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

Ответ 4

может подойти следующее

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

Ответ 5

Вы можете попробовать следующее:

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

требуется, чтобы под Meta.