2

我需要编写一个查询来返回月份列表中的所有对象。月份将根据日期字段计算,即(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 天开始就陷入了这个问题。

4

2 回答 2

3

您所要求的可以使用Q objects

以下推导将为您的month_list.

(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))
于 2012-11-22T14:22:00.010 回答
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)
于 2012-11-22T14:14:56.450 回答