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 回答