栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django auto_now和auto_now_add

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django auto_now和auto_now_add

auto_now
设置了属性的任何字段都将继承
editable=False
,因此不会显示在管理面板中。过去有过关于使
auto_nowand auto_now_add
参数消失的讨论,尽管它们仍然存在,但我认为你最好只使用自定义save()方法。

因此,为了使其正常工作,我建议不要使用

auto_now
auto_now_add
而是定义自己的
save()
方法以确保
created
仅在
id
未设置的情况下(例如,首次创建该项目时)才对其进行更新,并使其在
modified
每次该项目时都进行更新已保存。

我已经使用Django编写的其他项目完成了完全相同的操作,因此你

save()
将如下所示:

from django.utils import timezoneclass 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()
与依赖这些字段参数的原因有两个:

  1. 前述的起伏与它们的可靠性有关。这些参数在很大程度上取决于Django知道如何与之交互的每种类型的数据库对待日期/时间戳字段的方式,并且似乎在每个发行版之间都会中断和/或更改。(我相信这是完全删除它们的呼吁的推动力)。
  2. 它们仅在
    DateField,DateTimeField
    TimeField
    上起作用,使用这种技术,你可以在每次保存项目时自动填充任何字段类型。
  3. 使用
    django.utils.timezone.now()vs. datetime.datetime.now()
    ,因为它会根据来返回TZ感知或天真的
    datetime.datetime
    对象
    settings.USE_TZ

    为了解决OP为何会看到错误的原因,我不知道确切的信息,但是created尽管有,但看起来根本没有被填充
    auto_now_add=True
    。对我来说,它是一个
    bug
    ,并且在我上面的小列表中强调了项目#1:
    auto_now
    并且
    auto_now_add
    充其量是片状的。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号