2013-10-23 30 views
0

需要对最佳情况下某些属性值等于1,2,3和> 3的行数进行计数。 实施例:有没有办法在django中的一个循环中改进查询?

for i in xrange(1,4): 
    count = some_queryset\ 
     .filter(related__value__exact=i)\ 
     .annotate(count=Count('mtopening'))\ 
     .values_list('count',flat=True) 

是否有未经raw_sql或用简单的.extra选择在一个面向对象的方式来提高的方法吗?

+0

UPD。这种情况下需要3个不同的计数(1,2,3)。所以“_in”不适合。 –

回答

0

使用Django的计数方法

count = some_queryset \ 
    .filter(Q(related__value__gte=1) & Q(related__value__lt=4)).count() # This should work also without using Q() 

编辑

我不认为这是一个直接的方式在Django做到这一点,但我认为下面的代码将做的工作:

sums = [] 

for i in range(1,4): 

    sums.append(
     QUERYSET.filter(related__value = i).count() 
    ) 

print sums # will show you a list of sums of the values you want     
+0

我知道它,但我需要计数值= 1的对象,计数2的值= 2并且计数值为3,而不是一起计数。 –

+0

@ДмитрийКорнеев,请在我的答案中找到'EDIT' – securecurve

相关问题