簡體   English   中英

按相關模型的屬性對queryset排序,另一個屬性等於

[英]Ordering queryset by property of related model with another property equal to something

假設我有這個模型關系:

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

我有帳戶的queryset,它們都具有相同的余額數量,並且余額具有相同的名稱,但計數卻不同。 例如,我有3個帳戶,每個帳戶只有2個相關余額,名稱分別為“ foo”和“ bar”,但這些余額中的“ count”屬性可能有所不同。 如何通過名稱為“ foo”的余額的“ count”屬性訂購帳戶?

另外,如果可能的話,我想為這個問題尋求解決方案,但盡管我已經為此使用了過濾器,但還是進行了過濾,所以它並不是那么重要。

如果每個帳戶都有一個名為“ 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM