Python:分组过滤器

时间:2014-08-19 07:03:25

标签: django django-models

我有账单和客户服务。我会让那些在前一天买东西的用户。

如何使用帐单模型获取用户数?

我将统计此查询的不同用户:

recived = Bill.objects.filter(status=2,pay_status=True)

Bill模型:

class Bill(models.Model):
    number = models.CharField(max_length=20,default="")
    desc = models.TextField(null=True,blank=True,default="")
    total = models.IntegerField(default=0)
    discount = models.IntegerField(default=0)
    total_tax = models.IntegerField(default=0)
    total_discount = models.IntegerField(default=0)
    total_payed = models.IntegerField(default=0)
    pay_status = models.BooleanField(default=False)
    status = models.IntegerField(default=1)

    transport = models.ForeignKey(Transport,null=True,blank=True)
    address = models.ForeignKey(Address,null=True,blank=True)
    user = models.ForeignKey(User)
    product = models.ManyToManyField(Product,related_name='Bill_product',through="Bill_product")

    create_time = models.DateTimeField(auto_now_add=True)

2 个答案:

答案 0 :(得分:1)

如果Bills可能变得非常大,我可能会使用自定义SQL查询。类似的东西:

from django.db import connection


sql = """
    SELECT COUNT(DISTINCT user_id)
    FROM your-app-name_bill
    WHERE status=2
    AND pay_status=True;
"""

cursor = connection.cursor()
cursor.execute(sql)
cursor.fetchall()

或者,您可以使用用户ID填充列表,然后在列表上调用set()以使它们不同:

users = [x.user_id for x in Bill.objects.filter(status=2, pay_status=True)]
distinct_count = len(set(users))

答案 1 :(得分:-1)

您可以在查询集上使用count方法,如下所示    Bill.objects.filter(status=2,pay_status=True).count()

请参阅此处.. count