【发布时间】:2026-02-23 05:35:01
【问题描述】:
我尝试为我的渲染创建一个范围,但是当我使用 now() 或 date.today() 按日期过滤剧集时,我只有空查询。
models.py:
class Episode(models.Model):
date = models.DateTimeField(null=True, default=now)
我为这个过程导入了好的库:
from django.utils.timezone import now, timedelta
我认为这是个好方法:
page = 0
n = now()
Episode.objects.filter(date__range=[n-timedelta(days=(5*page)), n-timedelta(days=(5*(page+1)))])
<QuerySet []>
但它没有工作...... 对于信息:数据库有情节和价值谁键入 datetime.datetime :
for e in Episode.objects.filter():
print(e.date)
2017-02-22 19:12:31.351811+00:00
2017-02-22 19:12:31.418354+00:00
2017-02-22 19:12:31.468889+00:00
2017-02-22 19:12:31.524925+00:00
2017-02-22 19:12:31.599978+00:00
2017-02-22 19:12:31.680029+00:00
2017-02-22 19:12:31.744071+00:00
2017-02-22 19:12:31.803611+00:00
2017-02-22 19:12:31.872156+00:00
2017-02-22 22:24:56.733546+00:00
2017-02-23 19:16:00.600644+00:00
当我在范围内使用字符串直接时,它的工作...
Episode.objects.filter(date__range=['2017-02-22 19:12:31.351811+00:00','2017-02-22 19:12:31.744071+00:00'])
<QuerySet [<Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>, <Episode: Episode object>]>
我之前也尝试过初始化变量...
n = now()
page = 0
startDate = n-timedelta(days=5*page)
endDate = n-timedelta(days=5*(page+1))
Episode.objects.filter(date__range=[startDate, endDate])
<QuerySet []>
你有一个想法,为什么我可以使用now 或datetime 进行过滤并且它可以使用字符串?
编辑:查询
print(Episode.objects.filter(date__range=[startDate, endDate]).query)
SELECT "table_episode"."id", "table_episode"."card_id", "table_episode"."date", "table_episode"."number", "table_episode"."title", "table_episode"."type_episode", "table_episode"."tag", "table_episode"."url_access" FROM "table_episode" WHERE "table_episode"."date" BETWEEN 2017-02-23 22:46:06.391779 AND 2017-02-18 22:46:06.391779
<QuerySet []>
【问题讨论】:
-
您可以打印查询集查询并检查生成的 sql 是否有提示:
print Episode.objects.filter(date__range=[n-timedelta(days=(5*page)), n-timedelta(days=(5*(page+1)))]).query -
感谢您的回复,我不认为这样做,我将它添加到主帖。
-
endDate = n-timedelta(days=5*(page+1))endDate 将始终小于 startDate。检查条件。希望对你有帮助 -
谢谢你这么笨!所有的人都在谈论
startDate和endDate在范围内,但没有人谈论 startDate (当前日期)将排在第二位。如果有人需要,我会发布结果代码。 -
@Buky 您需要了解 __range 正在调用 sql BETWEEN 函数,该函数的第一个参数大于或等于第二个参数小于或等于。
标签: django model python-3.6