2016-09-23 25 views
0

我修改了我的表單以顯示模型中字段的新標籤。現在我不能讓用戶將表單字段留空。我試圖添加空白=真和空=真,但沒有運氣。我怎樣才能讓字段爲空?Django 1.9不能離開formfield空白問題

我的模型:

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

回答

1

嘗試在forms.py補充一點:

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

你必須爲每一個領域做到這一點。

+1

你和Daniel的工作。但是,對於你的我也可以寫一個clean_data函數來編寫我自己的驗證錯誤。另一種方法,不會讓我這麼做。 – Lefty

2

你推翻的領域,所以他們不會保留任何屬性;你需要明確地設置它們。

line1 = forms.CharField(label="Address", required=False) 

還要注意模型的字段定義不應該有null=True爲CharFields,這是不好的做法。

+0

謝謝Daniel,對於分享null = True是不好的做法。我將檢查編寫CharFields並糾正我的模型的正確做法。我沒有意識到這是不該做的事情!說實話,我對Django很新,即使閱讀文檔也讓我感到困惑。 – Lefty

+0

請參閱[文檔](https://docs.djangoproject.com/en/1.10/ref/models/fields/#null):「避免在基於字符串的字段(如CharField和TextField)上使用null,因爲空字符串值將會總是以空字符串存儲,而不是NULL。如果一個基於字符串的字段爲null = True,這意味着它有兩個可能的值:NULL和空字符串。在大多數情況下,它是多餘的兩個可能的值爲「無數據」; Django約定是使用空字符串,而不是NULL。「 –