如何过滤多个月的对象?
我试过这件事,但没有运气
Sample.objects.filter(date__year=2013,
date__month__in=[2, 7, 9, 12])
如果我尝试使用多个ID,那么以下内容将起作用
Sample.objects.filter(id__in=[1,4,8])
如何在django查询中过滤多个月的记录?
答案 0 :(得分: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]))