首页 > 解决方案 > 需要帮助来查找 django 模型中唯一一组条目的计数

问题描述

我有 3 个模型客户、服务和用途。Uses 模型包含客户使用的 customer_id 和 service_id(service)。

现在我想要的是一份关于客户使用每种不同服务的次数的列表。例如,如果服务说游泳池和自助餐被使用一次又两次,我希望答案是 [1,2]。我不希望对使用的不同服务进行计数,而是希望对每个特定服务进行计数。

这是我的模型

class Customer(models.Model):
    firstname = models.CharField(max_length=15)
    lastname = models.CharField(max_length=15)
    #other attributes

class Services(models.Model):
    service_name = models.CharField(max_length=15)
    price = models.IntegerField()

class Uses(models.Model):
    customer = models.ForeignKey(Customer,on_delete=CASCADE)
    service_id = models.ForeignKey(Services,on_delete=CASCADE)
    time_used = models.TimeField(default=timezone.localtime())

这就是我所得到的,它返回使用的不同服务。

count=Uses.objects.filter(customer_id=customer).values('customer_id','service_id').distinct().count()

需要一些帮助请修改它。

标签: pythondjangodjango-models

解决方案


你可以对象.annotate(…)Services

from django.db.models import Count

Services.objects.filter(
    uses__customer=customer
).annotate(
    times_used=Count('uses')
)

这个Services查询集产生的将有一个额外的属性times_used,它将计算customer使用该服务的次数。


注意:通常 Django 模型被赋予一个单数名称,所以Service而不是Services.


推荐阅读