带有日期时间对象的 Django 设置 models.DateField()

Django setting models.DateField() with a datetime object

最近从 django 1.11 升级到 2.2 后,我正在调试一些失败的测试,我注意到一个我以前没有意识到的行为。

考虑以下代码

from datetime import date, datetime, timedelta

class User(models.Model):
    birthday = DateField()

user = User.objects.create(birthday=date.today())

# setting the DateField object with datetime
yesterday_datetime = datetime.now() - timedelta(days=1)
user.birthday = yesterday_datetime
user.save()

user.refresh_from_db()
print(user.birthday)     # returns date.today()

我一直假设当 DateField 对象填充了 datetime 对象时,datetime 对象的日期方面将被获取并保存。似乎并非如此,该字段未更新/保存到数据库中。

这是 django 2+ 的行为还是已经有一段时间了?任何人都可以分享他们在这种极端情况下的经验吗?

看来问题与时区有关。您可以使用 datetime 对象设置 DateField 并保存它的日期方面。但必须考虑时区。