Opened 3 months ago
Last modified 3 months ago
#35771 closed Bug
Bugs: models.DateField value has not been assigned correct date value when auto_now_add is set — at Initial Version
Reported by: | Racing Car | Owned by: | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 5.0 |
Severity: | Normal | Keywords: | auto_now |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
class Vote(models.Model):
class Points(models.IntegerChoices):
Top = 3
Second = 2
Third = 1
points: models.IntegerField = models.IntegerField(choices=Points.choices, default=Points.Top)
date: models.DateField = models.DateField(auto_now_add=True)
from django.utils import timezone
timezone.now() # datetime.datetime(2024, 9, 18, 3, 7, 3, 608467, tzinfo=datetime.timezone.utc)
timezone.now().date()# datetime.date(2024, 9, 18)
import datetime
datetime.datetime.now() #datetime.datetime(2024, 9, 17, 23, 7, 14, 337114) My local pc timezone is UTC-4
datetime.date.today() #datetime.date(2024, 9, 17)
v = Vote(points=Vote.Points.Top)
v.save()
v.date # Expected value is datetime.date(2024, 9, 18) since I enabled USE_TZ=True in settings.py
# current value is datetime.date(2024, 9, 17)
"""
I figured it out myself and in pre_save
function of models.DateField class, we should use timezone.now().date() instead of datetime.date.today()
"""