如果给出default,Django BooleanField不会在post上返回值

时间:2016-07-26 03:11:18

标签: django django-models django-forms django-templates

我有这个模型: -

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_ame数据中的billing_same_as_mailing值始终为false。 但是如果我在模型中将BooleanField的默认值设置为False,那么一切正常。

现在当我检查浏览器上的checkbox元素时,这就是我得到的: - 默认值= False: -

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

默认= True: -

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

为什么会这样?

2 个答案:

答案 0 :(得分: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)时,检查=&#34;检查&#34;输入字段的填充没有填充,尽管两者的代码相同。

由于某种原因,输入字段的选中或值未填充。

要使表单正常工作,需要输入input元素的checked属性和value属性。

有谁知道为什么?

答案 1 :(得分:1)

你需要设置value="on"所以输入元素看起来像这样 -

<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']}

由于这是model form,如果我们确保request.POST看起来像ModelAForm所期望的那样,它会将其映射到相应的字段。您可以使用此方法检查是否还需要修改其他输入元素