按相关模型的属性对查询集进行排序,另一个属性等于某物



假设我有这样的模型关系:

class Account(models.model):
   ...
class Balance(models.Model):
    class Meta:
       verbose_name = u"Balance"
       verbose_name_plural = u"Balances"
    name = models.CharField(max_length=200, verbose_name=u"Currency", null=True, blank=True)
    count = models.FloatField(verbose_name=u"Count", null=True, blank=True)
    account = models.ForeignKey(Account, verbose_name='Account', on_delete=models.CASCADE, null=True, blank=True)
    def __str__(self):
       return self.name

我有帐户的查询集,它们都具有相同数量的余额,并且余额具有相同的名称但计数不同。例如,我有 3 个帐户,每个帐户只有 2 个名称为"foo"和"bar"的相关余额,但这些余额中的"计数"属性可能不同。如何按名称为"foo"的余额的"计数"属性对帐户进行排序?

另外,如果可能的话,希望获得此问题的解决方案,但对于过滤,尽管我已经为此使用了for in,所以它并不那么重要。

如果每个帐户都有名为"foo"的余额,那么您可以使用 foo 余额的总和注释查询集,然后按该

from django.db.models import Q, Sum
qs = Account.objects.all().annotate(
    foo_count=Sum('balances__count', filter=Q(balances__name='foo'))
).order_by('-foo_count')

最新更新