2016-07-26 6 views
-3

を与えられている場合はDjangoのBooleanFieldは私がこのモデルの持つポストに値を返さない: -デフォルトは

class ModelA(models.Model): 
    billing_same_as_mailing = models.BooleanField(default=True, label='...') 

そして、このフォーム: -

class ModelAForm(forms.ModelForm): 
    class Meta: 
     model = ModelA 
     fields = ['billing_same_as_mailing'] 

そして、私のテンプレートで私は、フィールドを試してみましたが。 - {{ form.billing_same_as_mailing }}

私が投稿するとき、billing_same_as_mailingの値は、cleaned_dataでは常にfalseです。 しかし、モデルでBooleanFieldのデフォルト値をFalseに設定すると、すべて正常に動作します。

今、私は、ブラウザ上のチェックボックス要素を検査する場合、これは私が得るものです: - デフォルト=偽の場合: - デフォルト=真で

<input class="" id="billing_same_as_mailing" name="billing_same_as_mailing" type="checkbox"> 

: -

<input checked="checked" class="" id="id_billing_same_as_mailing" name="billing_same_as_mailing" type="checkbox" value=""> 

なぜこれが起こっていますか?

+1

レンダリングされたHTMLは正常です。私は問題があなたが 'cleaned_data'の値をチェック/使用する方法であると思います。動作しないコードを表示してください。 – solarissmoke

+0

def form_valid(self、form): print form.cleaned_data これは、billing_same_as_mailingの値がFalse –

+0

の印刷フォームであることを示しています。cleaned_data ['billing_same_as_mailing'] も虚偽を返します –

答えて

1

私は最終的にこれをしなかった: -

<input type="checkbox" class="icheckbox" id="id_billing_same_as_mailing" name="billing_same_as_mailing" {% if form.billing_same_as_mailing.value %} checked="checked" {% endif %} value="{{ form.billing_same_as_mailing.value }}">{{ form.billing_same_as_mailing.label }} 

これは完全に正常に動作します。

私が試したことから、私のシステム(Django 1.9.8を実行中)では、入力フィールドの値がtrueに設定されていませんでした。 別のシステム(Django 1.7.3を実行している)で試したところ、入力フィールドのchecked = "checked"はコードは両方とも同じですが、入力されませんでした。

何らかの理由で、入力フィールドのチェック値または値が入力されていません。

フォームが正しく機能するためには、入力要素のcheckedプロパティとvalueプロパティの両方が存在する必要があります。

誰でも知っていますか?あなたはvalue="on"を設定する必要が

+0

@ Abhinav Nair答えに感謝していますが、なぜラジオボタンがすべて表示され、選択されていなくてもチェックされています – dungu

1

ので、入力要素は、次のようになります -

<input type="checkbox" class="icheckbox" id="id_billing_same_as_mailing" name="billing_same_as_mailing" {% if form.billing_same_as_mailing.value %} checked="checked" {% endif %} value="on">

私はビューのdefault options Djangoが提供し、伐採request.POSTのいずれかを使用してフォームをレンダリングしようとしました。ブールフィールドの場合は{u'billing_same_as_mailing' : [u'on']}です。

これはモデル形式なので、request.POSTが期待通りに見えるようにすると、それは対応するフィールドにマップされます。このメソッドを使用して他の入力要素を変更する必要があるかどうかを確認することもできます

関連する問題