django按多对多的对象排序

ary*_*yan 6 python django django-queryset

我有一个模特:

class Category(models.Model):
    questions = models.ManyToManyField('Question', related_name="cat_question", blank=True)
    cat_name = models.CharField(max_length=50)
    cat_description = models.CharField(max_length=255)

    def __unicode__(self):
        return self.cat_name
Run Code Online (Sandbox Code Playgroud)

在我看来,我有:

top_categories = Category.objects.all()[:7].
Run Code Online (Sandbox Code Playgroud)

我将它作为模板中的上下文传递.我想根据问题的数量对顶级类别进行排序,如果一个类别有大多数问题,那么它应该在顶部,如果B有大多数问题那么B.然后第二大等等......

喜欢 top_categories = Category.objects.all().order_by(Count(question)

有帮助吗?

cat*_*ran 17

Category使用问题数注释对象,然后按此编号按降序排序:

from django.db.models import Count

top_categories = Category.objects.annotate(q_count=Count('questions')) \
                                 .order_by('-q_count')[:7]
Run Code Online (Sandbox Code Playgroud)

你可以查看doc order-by中的示例,更多关于aggreagate 作弊表的例子