Django - 将 DateTimeField 默认设置为 timezone.datetime.max

hak*_*aki 2 django datetime

我正在尝试将日期时间字段的默认值设置为最大日期 timezone.datetime.max

from django.db import models
from django.utils import timezone

class Item(models.Model):
  id = models.AutoField(primary_key=True)
  deleted  = models.DateTimeField(default=timezone.datetime.max)
Run Code Online (Sandbox Code Playgroud)

每当我尝试将新对象保存到数据库时,都会收到此错误

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:903:
RuntimeWarning: DateTimeField Item.deleted received a naive datetime (9999-12-31 23:59:59.999999) while time zone support is active. RuntimeWarning)
Run Code Online (Sandbox Code Playgroud)

所以阅读关于这个问题的文档USE_TZ=True我已经设置并且我已经pytz安装了。

zym*_*mud 5

timezone.datetime- 这是datetime.datetime导入的常规 python模块,django.utils.timezone它返回常规日期时间,因此您需要注意:

timezone.make_aware(timezone.datetime.max, timezone.get_default_timezone())
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这个答案被接受,它并没有真正解决问题,因为 timezone.make_aware 不适用于超出范围的日期(在这种情况下为 datetime.max) (4认同)