Django按方法从queryset开始排序

时间:2013-10-05 21:03:57

标签: python django django-models

我想按entry_count订购,但似乎(从django错误)我只能按名称和状态订购。如何在此示例中按entry_count订购?感谢

Category.objects.filter(status='Published').order_by('-entry_count')

Model.py

class Category(models.Model):
    """
    Entry Categories.
    """
    name = models.CharField(max_length=60, help_text="Title of Category")
    status = models.CharField(max_length=16, choices=STATUS_CHOICES,
                              default="Draft", )
    @property
    def entry_count(self):
        return Entry.objects.filter(category=self.id).count()

1 个答案:

答案 0 :(得分:1)

您可以使用aggregation

执行此操作
from django.db.models import Count
Category.objects.annotate(
    entry_count=Count('entry_set')
).order_by('-entry_count')

像这样,您将获得一个查询中的所有计数,并且所有类别对象都将entry_count,因此您可以从模型中删除@property