2

これら 2 つのクエリセットを 1 つにチェーンできますか?

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 に答える