2013-10-05 5 views
0

Я хотел/а заказывать по entry_count, но кажется (из-за ошибки django) Я могу заказать только по названию и по статусу. Как я могу сделать заказ в entry_count в этом примере? БлагодаряDjango order by queryset from method

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

Вы можете сделать это с помощью aggregation:

from django.db.models import Count 
Category.objects.annotate(
    entry_count=Count('entry_set') 
).order_by('-entry_count') 

Как это, вы получите все счетчики в одном запросе и все категории объекты будут иметь entry_count, поэтому вы можете удалить @property от модели.