Django

Django models 时间类型 Field 中的 auto

2017-07-17  本文已影响254人  Tim_Lee

auto_nowauto_now_add 是Django 的 models 中,关于时间的两个属性参数。比如可以用在 DateField() 或者 DateTimeField() 的属性中。

1 auto_now 与 auto_now_add 的比较

使用示例,对于一个评论的 models, timestamp 是首次发表时间,updated 是最新编辑成功的时间:

from django.db import models

def comment(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

注意

2 使用情况考虑

auto_nowauto_now_add 从 Django 1.4.5 开始就相当于使用了 timezone.now(),而不是 datetime.now()

Django 与 pytz 的建议,如果对时间的准确度有相当高的要求(比如涉及到钱的情况),最好是把时间对象存储为 UTC 时间(全球标准时间,即格林威治时间),然后用户使用时再转化成本地时间(与时区相关)。

Django 的时间依赖于 pytz 包,但是在 Django 1.11 之前,Django 会查看是否存在 pytz 包,然后去使用该包的时区数据库。在 Django 1.11 以后,pytz 是默认随着 Django 一起安装了,但是 Django 的 settings.py 中,USE_TZ=False 是关闭的,要使用时区时,需要自己去打开。

参考

Django官方文档:DateField.auto_now 与 DateField.auto_now_add

stackoverflow: Django auto_now and auto_now_add

Django之TIME_ZONE初探

Django 1.11 官方文档:Time zones

Django 1.8.2 官方文档中文翻译:时区

pytz - World Timezone Definitions for Python

stackoverflow: How django time zone works with model.field's auto_now_add

上一篇 下一篇

猜你喜欢

热点阅读