python - 需要帮助来查找 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()
需要一些帮助请修改它。
解决方案
你可以对象.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
推荐阅读
- flutter - Flutter Button Stack - 图标需要与父级重叠
- scala - Scala Stream prepend 返回 List 而不是 Stream
- sql - SQL Server 在 where 子句中具有多列的筛选索引
- mysql - 更新表 - 您不能在 FROM 子句中指定目标表“类别”进行更新
- angular - Transloco - 如何避免将 transloco 根模块添加到非 transloco 应用程序但包含需要翻译的库
- javascript - 在具有静态屏幕尺寸的设备上检测移动屏幕方向,无论屏幕方向如何
- javascript - 如果用户按搜索或在 React 中输入,则仅获取数据?
- react-native - NSMutablearray 无法转换为有效的 url - 反应原生
- python - Discord.py Bot 无法处理旧消息
- computer-vision - 相同填充的正确实现是什么?