model中时间的使用

来源:4-8 organization modesl.py设计

叮咚Raindrop

2018-12-11

在app名为users中创建了三个表,但是UserProfile的生日字段用的是:DateField
birthday = models.DateField(verbose_name=u"生日", null=True, blank=True)
EmailVerifyRecord和Banner对于时间的存储用的是DateTimeField。
外面解释为:
DateTimeField.auto_now
这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。

DateTimeField.auto_now_add
这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。

在代码中没有见设置值为true,能问下?
关于这两个的区别使用见解吗,视频中没见到有解释。
谢谢

写回答

1回答

bobby

2018-12-12

课程中采用的模式是 设置default的方式去调用datetime的now方法, 这里提供的是通过设置值来让model自动设置当前时间,实际上达到的效果都是一样的,但是要注意一下 , 安装课程的default模式设置会比当前的设置模式灵活, 为什么呢? 因为default的模式实际上上可以传递一个函数进去的,这个函数可以是任意自己定义的函数,当然传递值也是可以的,如果是一个函数,那么django的model会在适当的时候调用你的函数,这样就比设置灵活多了,因为逻辑是你自己写的, 但是你这里问的是这两个参数的区别,那我们就说这两者时间的区别:

    1. auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。

    2. auto_now_add为添加时的时间,更新对象时不会有变动。


1
5
bobby
回复
叮咚Raindrop
好的,
2018-12-16
共5条回复

Python3.6+django+xadmin,打造在线教育平台

【毕设】Python 2.7到3.6 完美适配,Django升级2.0

3677 学习 · 4038 问题

查看课程