Django:为什么不能在F()表达式中使用\uuu year lookup?

2024-05-14 12:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个有两个DateField的模型:

class Event(models.Model):
    start_date = models.DateField()
    finish_date = models.DateField()

这允许我进行比较这些字段的查询,比如

ee=Event.objects.filter(finish_date=F('start_date'))

我可以处理日期的年份,比如

ee=Event.objects.filter(finish_date__year=2000)

但是当我尝试在F()内使用相同的查找__year时,如下所示:

ee=Event.objects.filter(finish_date__year=F('start_date__year'))

,失败:

FieldError: Cannot resolve keyword 'year' into field. Join on 'start_date' not permitted.

这样的行为有什么原因吗,或者它看起来像一个bug?你知道吗

我使用的是django1.11,我在https://docs.djangoproject.com/en/1.11/topics/db/queries/#using-f-expressions-in-filters中没有看到这样的限制。你知道吗


Tags: 模型eventdatemodelobjectsmodelsfilteryear
1条回答
网友
1楼 · 发布于 2024-05-14 12:38:34

你试过这个吗?你知道吗

from django.db.models.functions import ExtractYear
from django.db.models import F

Event.objects.annotate(finish_date_year=ExtractYear(F('finish_date'))).filter(start_date__year=F('finish_date_year'))

为什么F('start_date__year')不起作用?你知道吗

Django Doc,

An F() object represents the value of a model field or annotated column.

因此,表达式start_date__year不是模型字段注释列

相关问题 更多 >

    热门问题