请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

model中时间的使用

在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 17:35:43

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

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

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


1 回复 有任何疑惑可以回复我~
  • 提问者 叮咚Raindrop #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-12-12 20:49:01
  • 提问者 叮咚Raindrop #2
    可以理解为:利用datetime可以动态的设置相应的时间达到方便的效果
    回复 有任何疑惑可以回复我~ 2018-12-12 20:50:48
  • bobby 回复 提问者 叮咚Raindrop #3
    自定义方法灵活性强一些而已 也正好使得我们可以理解python的很多动态特性,比如default既可以设置值也可以设置函数,这点就已经很灵活了
    回复 有任何疑惑可以回复我~ 2018-12-14 14:22:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信