django - 如何与预取相关和预取进行聚合
问题描述
我有两个模型诊所和诊所信用:我想要一个带有可用余额的诊所列表问题是如果我使用注释,我必须使用诊所信用的查询集循环获取 avalibale alance:
class Clinic(models.Model):
"""
clinic model
"""
user = models.OneToOneField(User, related_name="clinic", primary_key=True,
on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
db_table = 'clinic'
class ClinicCredits(models.Model):
"""
credit details for clinic
"""
clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE, related_name='c_credits')
credits = models.FloatField('credits', default=0.0)
balance = models.FloatField('balance', default=0.0, help_text="balance after deduction of credits")
def __str__(self):
return self.clinic.name
class Meta:
db_table = 'clinic_credits'
这是我获取诊所的查询:
clinics = Clinic.objects.filter(practice_id__in=user.dietitian.practiceid).order_by(
'user__date_joined').prefetch_related(Prefetch('c_credits',ClinicCredits.objects.filter(balance__gt=0),'credit_'))
以及如何在这种情况下使用聚合,或者是否有其他方法可以用他们的可用积分来检索诊所列表。
解决方案
你可以尝试这样使用annotate(...)
:
clinics = Clinic.objects.filter(
practice_id__in=user.dietitian.practiceid
).order_by('user__date_joined').prefetch_related(
Prefetch(
'c_credits',
ClinicCredits.objects.filter(balance__gt=0),
'credit_'
)
).annotate(
total_cred=Sum('c_credits__balance')
)
推荐阅读
- asp.net-mvc - 多次登录和注销时,ASP.NET Identity Core cookie 导致 http 403 错误
- oracle - 来自元数据的 Oracle 列数据类型
- android - 'view' 容器在 Android 的 XML 中做了什么
- vagrant - 在 Vagrant libvirt 提供程序中为管理网络设置静态 IP
- python - pandas 最大数据返回元数据样式?
- opencv - /usr/bin/ld: 找不到 -lvtkRenderingOpenGL
- amazon-web-services - 如何通过 S3 静态网站托管在 API 网关上使用自定义域
- python - 获取 ttk.Combobox 中选定项目的索引
- kubernetes - EKS Kubernetes 无法在集群范围内的 API 组“”中列出资源“命名空间”
- c++ - 如何使用 gMock 创建 Mock 对象?