【问题标题】:Django BooleanField not returning value on post if default is given如果给出默认值,Django BooleanField 不会在帖子上返回值
【发布时间】:2016-11-29 13:04:12
【问题描述】:

我有这个模型:-

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

现在,当我发帖时,cleaned_data 中 billing_same_as_mailing 的值始终为 false。 但是如果我在模型中将 BooleanField 的默认值设置为 False,一切正常。

现在,当我检查浏览器上的复选框元素时,我得到的是:- 默认=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="">

为什么会这样??

【问题讨论】:

  • 呈现的 HTML 看起来不错。我猜想问题在于您如何检查/使用cleaned_data 中的值。向我们展示不起作用的代码。
  • def form_valid(self, form): print form.cleaned_data 这说明billing_same_as_mailing的值为False
  • 打印 form.cleaned_data['billing_same_as_mailing'] 也返回 False
  • 请发布minimal, complete, verifiable example 以重现您的错误 - 否则您只是要求在黑暗中拍摄。在这种情况下,我们需要您用来呈现和处理表单的视图和模板代码。
  • @AbhinavNair 你会在任何地方覆盖你的保存方法吗?

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


【解决方案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" 没有填充,尽管两者的代码相同。

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

为了使表单正常工作,输入元素的检查和值属性都需要存在。

有人知道为什么吗?

【讨论】:

  • @Abhinav Nair 嘿,感谢您的回答,但为什么每个单选按钮都会出现,即使未选中也会检查
【解决方案2】:

你需要设置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">

我尝试使用 Django 提供的default options 之一呈现表单并在视图中记录request.POST。对于布尔字段,它是{u'billing_same_as_mailing' : [u'on']}

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

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2011-07-08
    • 1970-01-01
    • 2013-05-12
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多