繁体   English   中英

如何按相关对象计数查询集?

[英]How to order a queryset by related objects count?

我的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')

无论如何,从这个可以理解的是2个漫画可以分享相同的主题,然而,每个漫画只能有一个主题。 现在我需要根据与它们关联的Comic对象的数量排序的Topic模型的对象列表。 例如,假设我有一个名为Unsorted的主题,它与15个漫画相关联,另一个名为Funny with 5 comics。 我希望我的查询集以Unsorted在Funny对象之前的方式排序。

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

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

你可以这样做:

from django.db.models import Count

# ...    

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM