注释来自另一个模型的聚合

时间:2019-07-14 19:48:19

标签: django subquery aggregate

我有4个模型

class SingleDonation(models.Model):
        name = models.CharField(
        max_length=255,
    )
    email = models.EmailField()
    transaction = models.OneToOneField(Transaction)

class RecurringDonation(models.Model):
    name = models.CharField(
        max_length=255,
    )
    email = models.EmailField()
    subscription = models.OneToOneField(Subscription)

class Subscription(models.Model):
    raw_amount = models.PositiveIntegerField()

    interval = models.CharField(
        max_length=10,
    )

class Transaction(models.Model):
    raw_amount = models.PositiveIntegerField()

    subscription = models.ForeignKey(
        to=Subscription,
        on_delete=models.SET_NULL,
        null=True, blank=True
    )    

我试图用电子邮件捐赠的总金额注释两个捐赠查询集

要获得正确的API数量(比如说SingleDonation),我是通过序列化器来完成的

def get_transaction_sum_for_email(self, obj):
    single_donation_sum = SingleDonation.objects.filter(email=obj.email).aggregate(Sum('transaction__raw_amount')).get('transaction__raw_amount__sum')
    recuring_donation_sum = RecurringDonation.objects.filter(email=obj.email).annotate(transaction_sum=Sum('subscription__transaction__raw_amount')).aggregate(Sum('transaction_sum')).get('transaction_sum__sum') or 0
    return single_donation_sum + recuring_donation_sum

但是我想要order_by()这个数量,所以我必须用这个数字注释我的queryset,这就是我遇到的问题。我该怎么办?

0 个答案:

没有答案