Django,根据列表中的日期时间过滤

时间:2014-07-12 15:11:48

标签: django

我有一份年份清单。我想过滤属于特定年份的对象:

begYears = [2012, 2013, 2014]
#dateTime field's name is 'beginning_date'. This code does not work...
works = Work.objects.filter(beginning_date__year__in=begYears)   

3 个答案:

答案 0 :(得分:2)

肯定一个比这更好的解决方案(写一个呈现年份并使用它的属性?使用date()过滤器?),但我现在想不到它:

works = Work.objects.filter(
     Q(beginning_date__year=2012)|
     Q(beginning_date__year=2013)|
     Q(beginning_date__year=2014)
     )

答案 1 :(得分:1)

Django 1.6不支持嵌套查找,即年度不可能。在1.7中,支持嵌套查找,但是1.7中没有实现。它可能是1.8的补充。目前,Q-approach是要走的路。

答案 2 :(得分:0)

运行时生成过滤条件(begYears可能不是硬编码,但在现实生活中扣除):

begYears = [2012, 2013, 2014]
q = Q()
for begYear in begYears:
    q.add(Q(beginning_date__year=begYear), Q.OR)
works = Work.objects.filter(q)