【问题标题】:Django ModelForm Boolean Field giving None when TrueDjango ModelForm 布尔字段在 True 时给出 None
【发布时间】:2013-06-07 19:52:18
【问题描述】:

我有一个models.py:

class MyModel(models.Model):
    ...
    fries_with_that = models.BooleanField()

forms.py:

class MyModelForm(ModelForm):

    class Meta:
        model = MyModel
        fields = (
            'fries_with_that',
        )

这很好用,并为我提供了“未知”、“是”和“否”作为选择的下拉菜单。但我真的想要一个复选框。所以我补充说:

编辑

        def __init__(self, *args, **kwargs):
            super(MyModelForm, self).__init__(*args, **kwargs)

            self.fields['fries_with_that'].widget = forms.CheckboxInput()

现在我得到一个复选框,但是当被选中时,表单返回值None。这是为什么呢?

编辑

views.py:

form = MyModelForm(request.POST or None)
if form.is_valid():
    # UPDATE PROJECT
    updated = MyModel.objects.filter(
        project_id=project_id
    ).update(**form.cleaned_data)
    if updated == 0:
        project = form.save()

【问题讨论】:

  • 你如何在视图中检索它?
  • 添加了视图代码。另外,我从文档中看到BooleanField 的默认值应该是一个复选框。为什么会出现下拉菜单?
  • 您使用的是NullBooleanField吗?它们默认为带有未知、是和否选项的选择框。
  • 您在哪里添加了这一行? self.fields['fries_with_that'].widget = forms.CheckboxInput()
  • __init__ 覆盖。抱歉,应该澄清一下。

标签: django django-forms


【解决方案1】:

试试这个:

class MyModelForm(ModelForm):

    fries_with_that = forms.BooleanField(widget=forms.CheckboxInput, default=False)

    class Meta:
        model = MyModel
        fields = (
            'fries_with_that',
        )

实际上,这应该呈现复选框。

fries_with_that = forms.BooleanField() 

【讨论】:

  • 好的,明白了。但是为什么我需要在这里声明布尔值呢?如果模型字段是BooleanField,这不是给定的吗?
  • 如果模型中的BooleanField 可以为空,则默认为None
  • 但在我的模型中我只有fries_with_that = models.BooleanField()。仅此而已。
  • 没有指定默认值。因此它将它作为None。如果您指定default,它将默认为该值。
  • 太棒了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2012-01-09
  • 2011-04-09
  • 2023-01-28
  • 2022-11-08
相关资源
最近更新 更多