在django查询中获取多个月的记录

时间:2013-03-03 13:00:29

标签: python django django-models django-views

如何过滤多个月的对象?

我试过这件事,但没有运气

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

如果我尝试使用多个ID,那么以下内容将起作用

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

如何在django查询中过滤多个月的记录?

1 个答案:

答案 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]))