2016-09-23 17 views
0

私のフォームを変更して、自分のモデルのフィールドに新しいラベルを表示しました。今ではユーザーがフォームフィールドを空白のままにすることはできません。私はblank = Trueとnull = Trueを追加しようとしましたが、運がありません。フィールドを空白にする方法を教えてください。Django 1.9フォームフィールドを空白にすることはできません

マイモデル:

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

あなたとダニエルの両方が働いた。しかし、自分では自分の検証エラーを書き込むためにclean_data関数を書くこともできました。もう一つの方法は、単純に私にこれをさせません。 – Lefty

2

あなたがフィールドをオーバーライドするので、彼らは属性のいずれかを保存しません。それらを明示的に設定する必要があります。

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

注意はまたあなたのモデルフィールドの定義はCharFieldsためnull=Trueを持つべきではないということ、これは悪い習慣です。

+0

ダニエルに、null = trueを共有してくれてありがとうございました。私はCharFieldsを書くための適切なプラクティスをチェックし、私のモデルを修正します。私はこれが何かではないことを知らなかった!正直言って、私はDjangoにはまったく新しいので、ドキュメントを読んでも私は混乱します。 – Lefty

+0

[docs](https://docs.djangoproject.com/en/1.10/ref/models/fields/#null)を参照してください。「CharFieldやTextFieldなどの文字列ベースのフィールドではnullを使用しないでください。空の文字列値は文字列ベースのフィールドにnull = Trueが指定されている場合は、 "データなし"の2つの値、NULLおよび空の文字列があることを意味します。ほとんどの場合、 "データなし"の2つの可能な値は、Djangoの規約はNULLではなく空の文字列を使用することです。 –

関連する問題