我有一个模型Game
,其datetimefield设置为默认的timezone.now()。
class Game(models.Model):
time = models.DateTimeField(default=timezone.now, blank=True, null=True)
我想查询在特定的一天玩了多少游戏。我尝试了以下命令,效果很好。
games = Game.objects.filter(time=timezone.now().strftime("%Y-%m-%d"))
但是现在我想查询将过滤器设置为特定日期的游戏,比如说timezone.now-1天。我尝试了timezone.localtime
和timezone.localdate
的不同变体,它们会产生ValueError。
>>> timezone.localtime(datetime.datetime.now(), timezone.get_default_timezone())
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/savi/python-environments/comments/lib/python3.6/site-packages/django/utils/timezone.py", line 207, in localtime
raise ValueError("localtime() cannot be applied to a naive datetime")
ValueError: localtime() cannot be applied to a naive datetime
我研究了不同的问题以及其他sites,但都没有提出任何针对我要尝试的方法的建议。也许我没有看对地方。如果有人可以指导我完成这一工作,我将非常感谢,在此先感谢您,新年快乐。
编辑 我已经按照建议尝试了该解决方案。
>>> time = timezone.now() - datetime.timedelta(days=1)
>>> time.strftime("%Y-%m-%d")
'2019-12-31'
>>> games = Game.objects.filter(time=time.strftime("%Y-%m-%d")
/home/savi/python-environments/comments/lib/python3.6/site-packages/django/db/models/fields/__init__.py:1427: RuntimeWarning: DateTimeField Game.time received a naive datetime (2019-12-31 00:00:00) while time zone support is active.
RuntimeWarning)
还有
>>> games = Game.objects.filter(time=timezone.now().date())
/home/savi/python-environments/comments/lib/python3.6/site-packages/django/db/models/fields/__init__.py:1369: RuntimeWarning: DateTimeField Game.time received a naive datetime (2020-01-01 00:00:00) while time zone support is active.
RuntimeWarning)
编辑结束
我的settings.py文件
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
答案 0 :(得分:0)
但是现在我要查询将过滤器设置为特定日期的游戏,让 说timezone.now-1天
您可以使用datetime.timedelta
games = Game.objects.filter(time = timezone.now() - datetime.timedelta(days=1)))
编辑:
对于特定日期过滤器,您可以在过滤时使用__date
>>> time = timezone.now() - datetime.timedelta(days=1)
>>> time.strftime("%Y-%m-%d")
'2019-12-31'
>>> games = Game.objects.filter(time__date = time.strftime("%Y-%m-%d"))