Django: Make certain fields in a ModelForm required=False

后端 未结 5 1938
无人共我
无人共我 2021-02-02 06:08

How do I make certain fields in a ModelForm required=False?

If I have:

class ThatForm(ModelForm):
  class Meta:
    widgets = {\"text\": Textarea(require         


        
相关标签:
5条回答
  • 2021-02-02 06:45

    When we need to set required option on a bunch of fields we can:

    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',
            )
    
    0 讨论(0)
  • 2021-02-02 06:47

    following from comments. Probably yes:

    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
    
    0 讨论(0)
  • 2021-02-02 06:53

    the following may be suitable

    class ThatForm(ModelForm):
        text = forms.CharField(required=False, widget=forms.Textarea)
    
    0 讨论(0)
  • 2021-02-02 06:57

    You could try this:

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

    requireds must be under Meta.

    0 讨论(0)
  • 2021-02-02 07:03

    you ought to add blank=True to the corresponding model

    The documentation says

    If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True.

    Also see the documentation for blank itself.

    0 讨论(0)
提交回复
热议问题