我需要编写一个返回月份列表中所有对象的查询。月份将根据日期字段计算,即(2012-10-21或2011-04-14)。当我这样做一个月它的工作正常
**Table.objects.filter(ad_date__month=month)**
。假设月份= 05
但是,当我试图在几个月的列表中这样做时,它无法正常工作。
**Table.objects.filter(ad_date__month__in=month_list)**
。假设month_list = [11,03,01,10]
我收到此错误:
"Join on field 'date' not permitted. Did you misspell 'month' for the lookup type?"
似乎Django认为它是一个连接操作。
请建议,我在最近2天遇到了这个问题。
答案 0 :(得分:3)
使用Q objects可以提出要求。
以下理解将在month_list
中为每个月创建一个Q对象。
(Q(ad_date__month=month) for month in month_list)
所有这一切现在都是
Table.objects.filter(*(Q(ad_date__month=month) for month in month_list))
编辑:
您可以使用reduce函数将“或”所有这些Q对象组合在一起
import operator
q_objects = (Q(ad_date__month=month) for month in month_list)
Table.objects.filter(reduce(operator.or_, q_objects))
答案 1 :(得分:0)
嗨,我知道这不是很好,但它会奏效。
from itertools import chain
result_list = []
for mm in month_list:
this_query = Table.objects.filter(ad_date__month=mm)
result_list = chain(result_list, this_query)