在我们最近从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+的行为,还是已经默认了很长一段时间?有人能分享他们对这个边缘案例的经验吗?
这个问题似乎与时区有关。您可以使用日期时间对象设置DateField,它会保存该对象的日期方面。但必须考虑时区。