Django order_by属性给出错误undefined



我试图按(降序)average_score排序,但当我运行它时,我得到错误:名称'average_score'未定义。我哪里做错了?

错误:name 'average_score'没有定义

模型:

def _get_average_rating(self):
reviews = Ratings.objects.filter(post=self)
average = reviews.aggregate(Avg('score'))['score__avg']
average = round(average, 1)
return average

average_score = property(_get_average_rating)

视图:

if sort == 'Average Rating':
Posts = Posts.order_by(-average_score)

尝试使用这个:-

views.py

Posts = Post.objects.all().order_by('-average_score')

您没有显示完整的view。因此很难猜测您是否使用idfilter objects

*注意:-.all()将从您的Post模型中获取所有对象。

首先,您不能在ORM查询中使用方法。其次,你会得到错误,因为没有名为average_score的变量存在于该作用域中。

需要在中添加逻辑您的查询,而不是尝试使用方法。

Post.objects.all().annotate(average_score=Avg('ratings__score')).order_by('-average_score')

注意:不要用python排序,你的数据库可以做得更有效率。

注意:模型名应该是单数所以Rating代替Ratings

我找到了答案:

使用python的Sorted方法:

Posts = sorted(Posts, key=lambda x: x.average_score, reverse=True)

相关内容

最新更新