【发布时间】:2011-01-31 19:40:32
【问题描述】:
我有以下型号:
class User:
name = models.CharField( max_length = 200 )
problem_user = models.BooleanField(default=False)
def points_total(self):
points_added = PointsAdded.objects.filter(user=self)
points_total = 0
for point in points_added:
points_total += point.points
return points_total
class PointsAdded:
points = models.IntegerField()
user = models.ForeignKey( User )
我想返回问题用户为 False 的用户列表,按 points_total 字段排序。
我知道我需要使用注释(如described here),但我是一个新手,并不知道如何使用它,因为示例与我的情况略有不同。这不起作用:
leaders = VideoUser.objects.filter(problem_user=False).pointsadded_set. \
.annotate(points_total=Sum('points__value')) \
.order_by('points_total')
替代方法似乎是在上面表达式的 annotate() 部分中写出我的整个 points_total 函数 - 这可能吗?
有没有办法实现我想要使用 Django 功能做的事情,或者我必须回退到 SQL 吗?或者我应该重新设计我的数据库:)
【问题讨论】:
标签: django django-models