2

我可以将这两个查询集链接到一个吗?

qs1 = OrderTicket.objects.filter(date__gt=datetime.date(2009, 1, 1), date__lt=datetime.date(2009, 1, 30)).values('order_type').annotate(value_1 = Sum('gbp_value')).order_by('order_type'),
qs2 = OrderTicket.objects.filter(date__gt=datetime.date(2009, 2, 1), date__lt=datetime.date(2009, 2, 30)).values('order_type').annotate(value_2 = Sum('gbp_value')).order_by('order_type'),

我想要的只是 value_1 和 value_2 列。Q 对象不是我需要的。也许 ORM 不支持这一点。

4

2 回答 2

2

您可以使用 | 组合查询集 和 & 运算符:

# You can combine queries with & and |.
>>> s1 = Article.objects.filter(id__exact=1)
>>> s2 = Article.objects.filter(id__exact=2)
>>> s1 | s2
[<Article: Area woman programs in Python>, <Article: Second article>]
>>> s1 & s2
[]

来源http://www.djangoproject.com/documentation/models/basic/

于 2010-01-22T22:01:12.940 回答
1

我建议使用Q 对象来替换 date__gt 和 date__lt 的过滤器

示例(未测试):

qs1 = OrderTicket.objects
    .filter(  Q(date__gt=datetime.date(2009, 1, 1), date__lt=datetime.date(2009, 1, 30)) 
            | Q(date__gt=datetime.date(2009, 2, 1), date__lt=datetime.date(2009, 2, 30))
           )
    .values('order_type').annotate(value_1 = Sum('gbp_value')).order_by('order_type')

这应该返回您正在寻找的两个日期。

于 2009-09-30T03:05:04.040 回答