【问题标题】:How to aggregate with prefetch related and prefetch如何与预取相关和预取进行聚合
【发布时间】:2020-04-27 18:02:09
【问题描述】:

我有两个模型诊所和诊所信用: 我想要一份可用余额的诊所列表 问题是,如果我使用注释,我必须使用临床信用查询集循环获取 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_'))

在这种情况下我如何使用聚合,或者是否有其他方法可以使用他们的可用积分来检索诊所列表。

【问题讨论】:

    标签: django foreign-keys prefetch django-annotate


    【解决方案1】:

    你可以这样尝试使用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')
    )

    【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2013-10-24
    • 2018-11-11
    相关资源
    最近更新 更多