为什么 Model.objects.filter 返回空查询?
Why is Model.objects.filter returning an empty query?
我正在阅读一篇关于 django 的文章,内容是关于对 here 进行查询。我有以下片段。
>>> Entry.objects.first().pub_date
datetime.date(2021, 8, 18)
>>> Entry.objects.first().mod_date
datetime.date(2021, 8, 18)
但是如果我尝试以下操作,我会得到一个空的查询集。
Entry.objects.filter(pub_date__year=F('mod_date__year'))
为什么它不起作用。这是一个错误吗?
与在过滤器中使用时相比,django 使用注释或 F 表达式处理 __year
和其他 __
日期提取似乎有所不同。
例如在 Postgres 中,使用 filter(pub_date__year=F('mod_date__year'))
生成的查询是:
WHERE EXTRACT(\'year\' FROM pub_date") = ("mod_date")
这会导致错误。但是如果与 filter(pub_date__year=2021)
:
这样的整数年份一起使用
WHERE "pub_date" BETWEEN 2021-01-01 AND 2021-12-31'
使用提取物:
要解决此问题,请尝试使用 Extract
生成正确的过滤器:
from django.db.models.functions import Extract
Entry.objects.filter(pub_date__year=Extract('mod_date', 'year'))
这将生成此查询:
WHERE EXTRACT(\'year\' FROM "pub_date") = (EXTRACT(\'year\' FROM "mod_date"))'
我正在阅读一篇关于 django 的文章,内容是关于对 here 进行查询。我有以下片段。
>>> Entry.objects.first().pub_date
datetime.date(2021, 8, 18)
>>> Entry.objects.first().mod_date
datetime.date(2021, 8, 18)
但是如果我尝试以下操作,我会得到一个空的查询集。
Entry.objects.filter(pub_date__year=F('mod_date__year'))
为什么它不起作用。这是一个错误吗?
与在过滤器中使用时相比,django 使用注释或 F 表达式处理 __year
和其他 __
日期提取似乎有所不同。
例如在 Postgres 中,使用 filter(pub_date__year=F('mod_date__year'))
生成的查询是:
WHERE EXTRACT(\'year\' FROM pub_date") = ("mod_date")
这会导致错误。但是如果与 filter(pub_date__year=2021)
:
WHERE "pub_date" BETWEEN 2021-01-01 AND 2021-12-31'
使用提取物:
要解决此问题,请尝试使用 Extract
生成正确的过滤器:
from django.db.models.functions import Extract
Entry.objects.filter(pub_date__year=Extract('mod_date', 'year'))
这将生成此查询:
WHERE EXTRACT(\'year\' FROM "pub_date") = (EXTRACT(\'year\' FROM "mod_date"))'