基于两个不同字段中的较高者对QuerySet进行排序

时间:2016-06-12 05:43:08

标签: python django python-3.x django-models django-queryset

我有这个型号:

class ScoringModel(model.Model):
    red_score = models.SmallIntegerField()
    blue_score = models.SmallIntegerField()

我试图根据两者之间的较大者对查询集进行排序。现在,取它们的总和是行不通的,因为这意味着得分为90到0的得分低于50到50的得分,这不是我想要的。 (基本上,我试图找到一个高分列表。)

我尝试在模型中添加一个函数,如下:

class ScoringModel(model.Model):
    red_score = models.SmallIntegerField()
    blue_score = models.SmallIntegerField()

    def max_score(self):
        return self.red_score if self.red_score > self.blue_score else self.blue_score

哪个不起作用,因为order_by函数不支持函数返回值(即ScoringModel.objects.order_by('-max_score')ScoringModel.objects.order_by('-max_score()')无法运行。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

我建议你看看这个答案

https://stackoverflow.com/a/1875616/5518973

您可以使用mysql函数GREATEST(field1,field2)代替Sum,然后按该额外字段排序。