2

月のリストにあるすべてのオブジェクトを返すクエリを作成する必要があります。月は日付フィールド、つまり(2012-10-21または2011-04-14)から計算されます。私が1か月間それをしているとき、それはうまく機能しています **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を使用して実行できます。

次の内包表記は、あなたの月ごとに Q オブジェクトを作成しますmonth_list

(Q(ad_date__month=month) for month in month_list)

これですべてが1行になりました

Table.objects.filter(*(Q(ad_date__month=month) for month in month_list))

編集:

reduce 関数を使用して、これらすべての Q オブジェクトをまとめて「or」することができます

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 に答える