django在使用ExtractYear()的简单算法时,似乎没有创建正确的MySQL查询。你知道吗
我有一个带有两个数据字段的模型:
class Event(models.Model):
start_date = models.DateField()
finish_date = models.DateField()
如果我想找到所有行,使开始日期和结束日期的年份相等,我可以这样做:
from django.db.models import F
from django.db.models.functions import ExtractYear
>>> print Event.objects.annotate(year=ExtractYear(F('start_date'))).filter(finish_date__year=F('year')).only('pk').query
SELECT `event`.`id`, EXTRACT(YEAR FROM `event`.`start_date`) AS `year` FROM `event` WHERE EXTRACT(YEAR FROM `event`.`finish_date`) = (EXTRACT(YEAR FROM `event`.`start_date`))
但是,如果我想找到在随后几年中开始和结束的事件,我会尝试以下过滤器,它会给我一个不正确的MySQL查询:
>>> print Event.objects.annotate(year=ExtractYear(F('start_date'))).filter(finish_date__year=F('year')+1).only('pk').query
SELECT `event`.`id`, EXTRACT(YEAR FROM `event`.`start_date`) AS `year` FROM `event` WHERE `event`.`finish_date` BETWEEN 0001-01-01 AND 0001-12-31
我试图用F('year')+Value(1)
替换F('year')+1
,但没有用。你知道吗
我是哪里错了,还是看起来像是django的虫子?
我也会很感激如果你看到任何其他方法做同样的!
这个问题似乎是正确的。你知道吗
但是,另一种查询在我的案例中起了作用:
只是注释了开始日期、结束日期和差异
这就是最终成功的原因:
看起来django有个虫子。我把它添加到https://code.djangoproject.com/ticket/30494。你知道吗
相关问题 更多 >
编程相关推荐