2016-08-03 5 views
0

私はDjangoフォームを使って特定のサインアップページを検証しています。フォームのように設定されている:私のDjangoフォームテンプレートがスペースの後のすべてのデータを削除するのはなぜですか?

class MemberForm(forms.Form): 
    email = forms.EmailField(label='Email', required=True) 
    password = forms.RegexField(label='Password', widget=forms.PasswordInput, required=True, regex=r'^(?=.*[A-Za-z])(?=.*\d)[\S]{8,}$') 
    confirm_password = forms.CharField(label='Confirm Password', widget=forms.PasswordInput, required=True) 
    full_name = forms.CharField(label='Full Name', required=True) 
    pref_name = forms.CharField(label='Preferred Name', required=False) 
    phone = forms.RegexField(label='Phone', regex=r'^\+?1?\d{9,15}$', required=True) 
    address = forms.CharField(label='Address', required=True) 
    city = forms.CharField(label='City', required=True) 
    provinces = forms.ChoiceField(label='Provinces', choices=PROVINCE_CHOICES, required=True) 
    postal_code = forms.RegexField(label='Postal Code', regex=r'^([A-Z][0-9][A-Z]\s[0-9][A-Z][0-9])$') 
    dob = forms.DateField(label='Birthday', required=True) 
    occupation = forms.CharField(label='Occupation', required=True) 

すべてが、この点では正常に動作している、フォームは、それが必要すべてを受け入れ、それが必要すべてを拒否します。フォームが無効な場合は、再度レンダリングします。これはすべて次のビューで行われます。

フォームが有効でない場合、私は単にページに留まり、現在のフォームを再利用します。しかし、フォームがリロードされると、何らかの理由でスペースがあるすべてのデータが表示されたときにスペースの後のすべてが消去されます。

たとえば、「Test Test」を私のフルネームとして使用し、それ以外のものを空白のままにしておくと、ページがリロードされたときに「Test」と表示されます。

私のフォームは、次のカスタムテンプレートを使用して表示されます。

{% for field in form %} 
    <div class="form-row grp-row grp-cells-1 {{ field.html_name }}"> 
     <div class="field-box l-2c-fluid l-d-4"> 
      <div class="c-1"> 
       <label {% if field.field.required %} class="required" {% endif %} for={{ field.html_name }}>{{ field.label }}</label> 
      </div> 

      <div class="c-2"> 
       <input class="vTextField" type="text" name={{ field.html_name }} id={{ field.html_name }} value={{ field.data|default_if_none:"" }}> 
      </div> 
     </div> 
    </div> 
{% endfor %} 

私は右の入力の横に{{ field.data|default_if_none:"" }}を出力しようと、それは文字列全体(この例では「テストテスト」)を表示するので、私は完全ので困惑しています私は正しいデータが通過していることを知っています。なぜ入力値が変更されたのか?

答えて

0

Djangoはこれをやっていない、あなたのブラウザは。あなたは引用符で値変数を配置する必要があります。

value="{{ field.data|default_if_none:"" }}" 

しかし、実際に、あなたのすべきではない。このような出力フィールド:ちょうど{{ field }}で、それを正しく行うためにはDjangoを使用しています。

+0

私はもともと試したことはありますが、それは何もせずに常に '<入力'を表示するようにデフォルト設定されています。それをやっている理由は何ですか? – Written

+0

私はあなたが 'input'タグ全体の代わりにそれを使うべきであることを意味しました。余分なhtmlクラスをフォーム定義自体に追加することができます。 –

関連する問題