- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
对于 Django 1.1。
我的 models.py 中有这个:
class User(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
更新一行时我得到:
[Sun Nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: Warning: Column 'created' cannot be null
[Sun Nov 15 02:18:12 2009] [error] return self.cursor.execute(query, args)
我的数据库的相关部分是:
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
这是否值得关注?
附带问题:在我的管理工具中,这两个字段没有显示。这是预期的吗?
最佳答案
任何带有 auto_now
的字段属性集也将继承 editable=False
,因此不会显示在管理面板中。过去曾讨论过制作 auto_now
和 auto_now_add
争论消失了,尽管它们仍然存在,但我觉得你最好使用 custom save()
method .
因此,为了使其正常工作,我建议不要使用 auto_now
或 auto_now_add
而是定义自己的 save()
方法确保 created
仅在未设置 id
时更新(例如首次创建项目时),并让它更新 modified
每次项目的保存时间。
我用 Django 编写的其他项目也做了同样的事情,所以你的 save()
看起来像这样:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
希望这会有所帮助!
根据评论进行编辑:
我坚持重载 save()
与依赖这些字段参数的原因有两个:
django.utils.timezone.now()
与 datetime.datetime.now()
,因为它会返回一个 TZ 感知或天真的 datetime.datetime
对象取决于 settings.USE_TZ
。为了解决 OP 看到错误的原因,我不知道确切的原因,但看起来 created
甚至根本没有被填充,尽管有 auto_now_add=True
。对我来说,它是一个错误,并强调了上面我的小列表中的第 1 项:auto_now
和 auto_now_add
充其量是不稳定的。
关于python - Django auto_now 和 auto_now_add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737017/
给定一个模型 class Foo(models.Model): bar = models.DateTimeField(auto_now_add=True) 当我这样做 my_foo = Foo
我有这样一个模型: class FooBar(models.Model): createtime = models.DateTimeField(auto_now_add=True) l
我有 django 1.11 应用程序,我想为我的解决方案编写单元测试。 我想测试注册日期功能。 模型.py: class User(models.Model): first_name = m
我是 Django 的新手。这是我遇到的问题。 模型.py: created_time = models.DateTimeField('Created Time', auto_now_add=True
我在Django 模型字段的属性中理解的是 auto_now - 每次调用 Model.save() 时将字段值更新为当前时间和日期。 auto_now_add - 使用创建记录的时间和日期更新值。
在其中一个模型中,我设置了一个时间戳字段,如下所示: created_datetime = models.DateTimeField(auto_now_add = True) 虽然在 shell 中我
对于 Django 1.1。 我的 models.py 中有这个: class User(models.Model): created = models.DateTimeField(auto_
我有一个模型(如下所示),我在其中设置了 auto_now_add=True对于 DateTimeField class Foo(models.Model): timestamp = mode
正如标题所说,具有 auto_now 和 auto_now_add 的字段不会出现在管理部分,与此相关: Django auto_now and auto_now_add 你能以某种方式让它们出现吗?
由于 auto_now_add 在 Django 模型中 sent_at 不在 pytest 工厂工作。需要为 pytest 工厂覆盖 sent_at class ABC(models.Model):
我的模型有一个自定义主键和一个带有 auto_now_add = True 的 DateTimefield: slug = models.CharField(max_length=5, primary
我有数据库模型,其中一个属性有 auto_now_add=True。但看起来它不像我预期的那样工作 - 每次调用 put 时它都会更新(我使用我自己的 key_name,所以第二个/第三个/N put
以下是我的模型: class MyModel(models.Model): code = models.CharField(_('Code'), max_length=56, null=Fal
我知道 Django 有一个 last_modified 字段的特性 (models.DateTimeField(auto_now_add=True)).. 但是假设我有一个特定的应用程序,我想知道它
我创建了一个模型: class Job(models.Model): jobId = models.AutoField(primary_key = True) startTime =
我的模型中有这个字段: createdTime = models.DateTimeField(_('Creation date'), help_text=_('Date of the creation
我想模拟计时,以便能够将特定时间设置为 DateTimeField 类型的字段,在 auto_now_add=True 期间我的测试例如: class MyModel: ... cre
django如何在字段标记为auto_now_add属性时写入日期字段? 它像 datetime.now().date() 还是 timezone.now().date()? 换句话说,它使用哪个时区
各位 Djangonauts: 我用 django-lint 检查了我的项目,它产生: W:211,16:MyModel: timestamp: Uses superceded auto_now or
我想时区管理是在 Django 1.4 中添加的,所以这个问题很新。 我用了一个简单的模型 class Sample(models.Model): ... date_generated
我是一名优秀的程序员,十分优秀!