Django - 按方法排序Queryset

时间:2014-01-01 20:31:07

标签: python django

我正在尝试按照与每个主板相关联的帖子数量来订购此查询集。

以下是董事会模式:

class Board(models.Model):
    name = models.CharField(max_length=140)
    def num_posts(self):
        return self.post_set.all().count()

这是帖子模型:

class Post(models.Model):
    title = models.CharField(max_length=140)
    content = models.TextField()
    location = models.ForeignKey(Board)

以下是我试图获取所有电路板的视图,按照每个电路板上的帖子数排序:

def index(request):
    board_list = Board.objects.order_by('num_posts')
    context = RequestContext(request, {
        'board_list':board_list
    })
    return render(request,'index.html',context)

它不起作用。我收到这个错误:

 Cannot resolve keyword 'num_posts' into field.

1 个答案:

答案 0 :(得分:3)

无法按方法排序 - 这不会很好地转换为SQL查询。

以下是您可以做的事情:

from django.db.models import Count

board_list = Board.objects.annotate(num_posts=Count('post')).order_by('num_posts')