【问题标题】:Ordering queryset by property of related model with another property equal to something按相关模型的属性排序查询集,另一个属性等于某物
【发布时间】:2023-04-07 19:34:01
【问题描述】:

假设我有这种模型关系:

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',但这些余额中的 'count' 属性可能不同。我如何通过名称为“foo”的余额的“计数”属性来订购帐户?

如果可能的话,我想为这个问题找到解决方案,但为了过滤,虽然我已经为此使用了 for in,所以它并不那么重要。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果每个帐户都有一个名为“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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多