【问题标题】:Which timezone does Django use in DateField's auto_now_add?Django 在 DateField 的 auto_now_add 中使用哪个时区?
【发布时间】:2014-11-28 16:14:47
【问题描述】:

当字段标记为auto_now_add属性时,Django如何编写日期字段?

datetime.now().date() 还是timezone.now().date()

换句话说,它使用哪个时区来获取当前日期?

【问题讨论】:

    标签: python django django-models timezone


    【解决方案1】:

    看起来它使用datetime.date.today(),这将是系统的本地日期:

    db/models/fields/__init__.py:

    class DateField(Field):
        ...
        def pre_save(self, model_instance, add):
            if self.auto_now or (self.auto_now_add and add):
                value = datetime.date.today()
                setattr(model_instance, self.attname, value)
                return value
    

    如果您想要不同的行为,您可以删除 auto_now_add=True,然后将模型的 pre_save 信号连接到接收器,将您的字段设置为您选择的日期。

    或者,您可以覆盖模型的 save 方法并在那里设置字段。

    【讨论】:

      【解决方案2】:

      Django 默认使用你的 settings.py TIME_ZONE 属性中提到的时区。

      默认设置为:

      TIME_ZONE = 'UTC'
      

      有关其用法的更多详细信息,请参见此处:

      https://docs.djangoproject.com/en/1.7/topics/i18n/timezones/

      【讨论】:

        猜你喜欢
        • 2012-07-01
        • 2015-08-22
        • 2021-04-20
        • 2010-12-16
        • 2018-09-27
        • 2011-08-19
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多