У меня есть следующие модели:Django - заказ фильтра на сумму значений ForeignKey?
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)
Я хочу, чтобы вернуть список пользователей, для которых problem_user ложно, заказанных points_total поля.
Я знаю, что мне нужно использовать аннотацию (как described here), но я новичок и не знаю, как ее использовать, потому что пример немного отличается от моего случая. Это не работает:
leaders = VideoUser.objects.filter(problem_user=False).pointsadded_set. \
.annotate(points_total=Sum('points__value')) \
.order_by('points_total')
Альтернативой, кажется, выписывать всю мою points_total функции внутри секции аннотировать() из приведенного выше выражения - это возможно?
Есть ли способ достичь того, что я хочу делать с функциональностью Django, или я должен вернуться к SQL? Или мне нужно переконфигурировать мою базу данных :)
К сожалению, это создает синтаксический эффект во второй строке. Я также попытался использовать Sum ('points'), но это также дало SyntaxError. Дайте мне знать, если вы хотите получить полную трассу. – AP257
Извините, оставив дополнительную точку. Попробуйте сейчас. –
По-прежнему не повезло, извините :(Это дает мне «FieldError at/leaderboard/ Невозможно разрешить ключевые слова« точки »в поле. Варианты:« а затем список полей из поля «Пользователь». Похоже, он не знает он должен использовать поле PointsAdded ...? – AP257