我的模型如下:
class Loan(models.Model):
lender = models.ForeignKey(User, related_name='lender')
borrower = models.ForeignKey(User, related_name='borrower')
money = models.IntegerField()
我想要做的是计算用户的总计:
gross_total = Loans.object.filter(lender=user).annonate(Sum('money'))
- Loans.object.filter(borrower=user).annonate(Sum('money'))
我目前的总计算是使用两个查询。我想要一个查询。
感谢。
答案 0 :(得分:2)
from django.db.models import Case, Value, When, IntegerField
gross_total = Loans.object.aggregate(
gross=Sum(
Case(
When(lender=user, then=F('money')),
default=0, output_field=IntegerField)
)
) - Sum(
Case(
When(borrower=user, then=F('money')),
default=0, output_field=IntegerField)
)
)
)
答案 1 :(得分:0)
首先,当您使用来自同一用户模型的两个外键时,您需要为它们提供一个相关名称'像这样:
gross_total = Loans.objects.filter(lender=user).values('user').annotate(score = Sum('money')) - Loans.objects.filter(borrower=user).values('user').annotate(score = Sum('money'))
现在回答你的问题,你需要的是这篇文章中给出的东西 - > How to group by AND aggregate with Django
因此,您的问题所需的查询很可能是:
$.getJSON(myURL, function(data) {
state = (parseInt(data.result) == 1)
$('#phoneyRadio1').attr('checked', !state);
$('#phoneyRadio2').attr('checked', state);
});