有没有办法在django中的循环中改进查询?

时间:2013-10-23 00:58:15

标签: python django django-models

在最佳情况下,需要计算某些属性值等于1,2,3和> 3的行数。 例如:

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 select的情况下以面向对象的方式进行改进?

1 个答案:

答案 0 :(得分: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