【问题标题】:how to handle an 'auto-now' field in a django form?如何处理 django 表单中的“auto-now”字段?
【发布时间】:2015-10-17 08:05:16
【问题描述】:

在我的一个 django 模型中,我有一个这样的字段:

modified = models.DateTimeField(auto_now=True)

我想,在为这个模型创建 ModelForm 时,我可以跳过这个字段,Django 会自动填充它。

我的模型表单:

class FooForm(forms.ModelForm):
    class Meta:
        model = Foo
        fields = ['text', 'name', 'description'] # notice - modified field not included -
            # should not be shown to the user

但是,即使它没有出现在表单中,但在提交时,在创建新对象时,我得到了一个异常:

IntegrityError at /url/ - null value in column "modified" violates not-null constraint

我怎样才能做到这一点?

【问题讨论】:

  • 您是否在您的模型表单中排除了它?还是显示给用户
  • 您需要提供更多详细信息 - 模型、视图、表单等。该字段中不应有空值,因此有些奇怪。
  • 创建对象时会发生这种情况吗?然后你还必须将auto_now_add 设置为True
  • @KlausD。这就是问题所在。如果您将其作为答案提交,我会接受。
  • 您应该提供回答问题所需的相关代码。

标签: python django postgresql python-3.x django-1.8


【解决方案1】:

您只需要为该字段提供一个默认值。 这可以按如下方式完成:

from datetime import datetime
modified = models.DateTimeField(default=datetime.now)

【讨论】:

    【解决方案2】:

    在这种情况下,auto_now 字段不会自动填充。

    你需要使用auto_add_now,所以字段定义如下:

    modified = models.DateTimeField(auto_now_add=True)
    

    然后,如果字段没有显示,django 会自动添加日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-26
      • 2014-08-19
      • 2023-01-23
      • 1970-01-01
      • 2010-12-14
      • 2014-10-06
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多