我有一个模特:
class Person(models.Model):
score1 = models.FloatField(default=0)
score2 = models.FloatField(default=0)
score3 = models.FloatField(default=0)
我需要按平均分数(即(score1 + score2 + score3)/3
)按降序对记录进行排序。
对于以下Person
s列表:
p1 = Person(score1=3, score2=4, score3=5) # avg = 4
p2 = Person(score1=3, score2=2, score3=1) # avg = 2
结果应该是:
[<p2>, <p1>]
答案 0 :(得分:2)
您可以使用F表达式以平均分数注释每一行:
from django.db.models import F
ps_with_avg = Person.objects.annotate(
avg=(F('score1')+F('score2')+F('score3'))/3
)
然后按照平均分数对它们进行排序:
ordered_ps = ps_with_avg.order_by('-avg')
检查生成的SQL以验证它是否符合您的要求:
print(ordered_ps.query)