【问题标题】:Django form save - update boolean fieldDjango 表单保存 - 更新布尔字段
【发布时间】:2018-07-05 16:35:57
【问题描述】:

我有以下型号:

class Survey(models.Model):
    is_published = models.BooleanField()

默认设置为“False”。

我正在使用 modelForm 将其添加到表单中。当我在表单上调用 save() 方法时,我想将“False”更改为“True”并将其保存到数据库。我该怎么做?

我已经阅读了https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/,但没有解释它是如何工作的。

【问题讨论】:

  • 不清楚你在问什么。如果用户选择了该框并且您保存了表单,则该字段将被更新。
  • 啊,抱歉 - 我想在后台更新字段。我不想让用户打勾,我想“保存时自动打勾”

标签: django forms save boolean modelform


【解决方案1】:

您在视图中执行此操作。

if form.is_valid()
    obj = form.save(commit=False)
    obj.is_published = True
    obj.save()
    return redirect('wherever')

【讨论】:

    【解决方案2】:

    在你的模型下你可以定义保存方法:

    def save(self, *args, **kwargs):
        ...
        self.is_published = True
        ...
        super(Survey, self).save(*args, **kwargs)
    

    然而,这意味着每次保存模型实例时,字段都会更改!

    如果您只想在创建实例时更改它,您可以添加此检查:

    if not self.pk:
        self.is_published = True
    

    【讨论】: