0

複数の月のオブジェクトをフィルタリングする方法は?

私はこれを試しましたが、運はありません

  Sample.objects.filter(date__year=2013, 
                        date__month__in=[2, 7, 9, 12])

複数のIDを試してみると、次のように動作します

  Sample.objects.filter(id__in=[1,4,8])

djangoクエリで複数の月のレコードをフィルタリングするにはどうすればよいですか?

4

1 に答える 1

2

申し訳ありませんが、そのためのルックアップはありません (__monthはすでにルックアップであり、それらをチェーンすることはできません) が、Qオブジェクトを使用してそれを行うことができます:

from django.db.models import Q

def month_in(months, field='date'):
    q = Q()
    for m in months:
       q |= Q(**{field + '__month': m})
    return q

Sample.objects.filter(month_in([2, 7, 9, 12]), date__year=2013)

 

または、年を入れるかもしれません:

def month_in(year, months, field='date'):
    q = Q(**{field + '__year': year})
    for m in months:
       q |= Q(**{field + '__month': m})
    return q

Sample.objects.filter(month_in(2013, [2, 7, 9, 12]))

次に、次のようなことができます

Sample.objects.filter(month_in(2013, [2, 7, 9, 12]) | month_in(2012, [9, 11]))
于 2013-03-03T13:11:47.543 に答える