【问题标题】:How to order a queryset by related objects count?如何按相关对象计数排序查询集?
【发布时间】:2015-11-06 20:56:23
【问题描述】:

我的models.py目前设置如下:

class Topic(models.Model):
    topic = models.CharField(max_length = 50)

    def __str__(self):
        return self.topic

class Comic(models.Model):
    ...
    topic = models.ForeignKey(Topic, blank = True, null = True,
    related_name = 'comics')

不管怎样,两部漫画可以共享同一个主题是可以理解的,但是,每部漫画只能有一个主题。现在我需要一个 Topic 模型的对象列表,该列表根据与它们关联的 Comic 对象的数量进行排序。例如,假设我有一个名为 Unsorted 的主题,它与 15 幅漫画相关联,另一个主题名为 Funny 与 5 幅漫画相关联。我希望我的查询集以 Unsorted 位于 Funny 对象之前的方式排序。

Topic.objects.all().order_by('-comics')

我尝试了这个,但它并没有真正起作用,即使没有错误,结果也没有以正确的方式排序。那么有什么解决方案吗?谢谢!

【问题讨论】:

  • 你得到什么错误?
  • @Gocht:嗯,没有错误,结果集与我想要的不同,也就是说,它没有正确排序。

标签: python django django-models django-queryset


【解决方案1】:

你可以这样做:

from django.db.models import Count

# ...    

Topic.objects.annotate(cc=Count('comic')).order_by('-cc')

【讨论】:

  • 我想你想要'-cc' 降序排列。
  • 它说有一个 NameError: name 'Count' is not defined,在使用该函数之前我需要导入一个库吗?编辑:没关系,我知道了,它来自 django.db.models
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2015-08-31
  • 2011-12-06
  • 1970-01-01
相关资源
最近更新 更多