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回答
-
课程中采用的模式是 设置default的方式去调用datetime的now方法, 这里提供的是通过设置值来让model自动设置当前时间,实际上达到的效果都是一样的,但是要注意一下 , 安装课程的default模式设置会比当前的设置模式灵活, 为什么呢? 因为default的模式实际上上可以传递一个函数进去的,这个函数可以是任意自己定义的函数,当然传递值也是可以的,如果是一个函数,那么django的model会在适当的时候调用你的函数,这样就比设置灵活多了,因为逻辑是你自己写的, 但是你这里问的是这两个参数的区别,那我们就说这两者时间的区别:
1. auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
2. auto_now_add为添加时的时间,更新对象时不会有变动。
152018-12-16
相似问题