Search code examples
pythondjangodjango-modelsdjango-formsdjango-1.9

Django 1.9 Can't leave formfield blank issue


I modified my forms to show a new label for the fields in my model. Now I can't have a user leave the form field blank. I've tried to add blank=True and null=True, but without luck. How can I allow fields to be blank?

My Model:

class UserProfile(models.Model):
    # Page 1
    user = models.OneToOneField(User)
    first_name = models.CharField(max_length=100, blank=True)
    last_name = models.CharField(max_length=100, blank=True)
    email = models.EmailField(max_length=100, blank=True, unique=True)

    # Page 2 Address
    line1 = models.CharField(max_length=255, blank=True, null=True)
    line2 = models.CharField(max_length=255, blank=True, null=True)
    line3 = models.CharField(max_length=255, blank=True, null=True)
    city = models.CharField(max_length=255, blank=True, null=True)
    state = models.CharField(max_length=2, blank=True, null=True)
    zip_code = models.CharField(max_length=15, blank=True, null=True)

    def __str__(self):
        return self.user.username

forms.py:

class UserProfileForm3(forms.ModelForm):
    line1 = forms.CharField(label="Address")
    line2 = forms.CharField(label="")
    line3 = forms.CharField(label="")
    city = forms.CharField(label="City / Town")
    state = forms.CharField(label="State / Province / Region")
    zip_code = forms.IntegerField(label="Zip / Postal Code")

    def __init__(self, *args, **kwargs):
        super(UserProfileForm3, self).__init__(*args, **kwargs)
        self.fields['line1'].widget.attrs = {
            'class': 'form-control',
            'placeholder': 'Address Line 1'
        }
        self.fields['line2'].widget.attrs = {
            'class': 'form-control',
            'placeholder': 'Address Line 2'
        }
        self.fields['line3'].widget.attrs= {
            'class': 'form-control',
            'placeholder': 'Address Line 3'
        }
        self.fields['city'].widget.attrs = {
            'class': 'form-control',
            'placeholder': 'City'
        }
        self.fields['state'].widget.attrs = {
            'id': 'state_id',
            'class': 'form-control',
            'placeholder': 'State'
        }
        self.fields['zip_code'].widget.attrs = {
            'id': 'zip_code_id',
            'class': 'form-control',
            'placeholder': 'Zip'
        }
        self.fields['country'].widget.attrs = {
            'class': 'form-control',
            'placeholder': 'US',
            'value': 'US'
        }

    class Meta:
        model = UserProfile
        fields = ('line1', 'line2', 'line3', 'city', 'state', 'zip_code','country')

Solution

  • Try to add this in forms.py:

    self.fields['line1'].required = false
    

    You will have to do this for every field.