1

標準のDjangoフォームに次のように定義されたBooleanFieldがあります。

my_boolean_field = BooleanField(initial=True)

フォームを初期データでレンダリングし、my_boolean_fieldが初期値Falseに設定されている場合、フォームがレンダリングされると、htmlが示すように値がfalseであるにもかかわらず、フォームはチェックされます。

<p><label for="id_2">my_boolean_field</label>: 
    <input checked="checked" 
           type="checkbox" 
           name="2" 
           value="False" 
           id="id_2" /> 
</p>

他の誰かがこれを経験したことがありますか、または初期データ/入力値がfalseの場合にチェックボックスがチェックされないように修正する方法を知っていますか?

更新:BooleanFieldからinitial = True引数を削除しても、同じことが起こります。

4

2 に答える 2

3

まず、を使用することはできません。代わりに使用required=Falseしてください。BooleanFieldNullBooleanField

これを実行したら、新しいウィジェットのHTML出力を教えてください。

編集

これはModelFormだと思いました。これは通常のdjango.forms.Formですか?

編集2

私のテストフォーム:

from django import forms

class MyForm(forms.Form) :
    """The test form"""
    my_boolean_field = forms.BooleanField(initial=True)

私のテンプレート:

<div>
{{ form.my_boolean_field.label_tag }}
{{ form.my_boolean_field }}
{{ form.my_boolean_field.errors }}
</div>

これは、ページソースを表示したときに出力されるものです。編集済み

<div>
<label for="id_my_boolean_field">My boolean field</label>
<input type="checkbox" name="my_boolean_field" id="id_my_boolean_field" />
</div>

マイビューNEW

form = MyForm(initial={'my_boolean_field':False})

あなたが見せているものと私が見ているものは一致していません。完全なフォーム、ビュー、テンプレートを貼り付けてください。

編集3

次のような出力しか表示されません。

<div>
<label for="id_my_boolean_field">My boolean field</label>
<input checked="checked" type="checkbox" name="my_boolean_field" value="False" id="id_my_boolean_field" />
</div>

Falseを引用符で囲むと:

form = FormLogin(initial={'my_boolean_field':"False"})
于 2012-09-11T13:26:23.647 に答える
0

私は同じ問題を抱えていて、フランシスの答えが役に立たなかったので、この答えを投稿しています。

最終的に、解決策は再実行することであることがわかりましたmanage.py syncdb。私のフィールドは以前はIntegerFieldでしたが、それらをBooleanFieldに変換していました。BooleanFieldは、データベース内のvalue = "0"の存在を、初期化およびチェックされているものとして読み取ります。これは、モデルの内容に関係ありません。あなたは見たい:

<input checked="checked" id="id_cost_track_destruction" name="cost_track_destruction" type="checkbox">

要素を検査するとき。このバグはDjango管理パネルに表示されるため、forms.pyとは何の関係もありません。

これは純粋にモデルとデータベースの問題です。models.pyフィールドタイプを変更した場合は、データベースを再生成してみてください。

于 2014-02-27T19:51:14.133 に答える