django 如何在两个字段中使用order_by并赋予它们相同的优先级

nx7onnlm  于 2022-12-30  发布在  Go
关注(0)|答案(1)|浏览(208)

我有模型,我习惯于排序我的对象的基础上两个字段和两个字段有相同的优先级

class Item(models.Model): 

    rank1 = models.IntegerField()
    rank2 = models.IntegerField()

如何对具有相同优先级字段进行排序和排序

Item.objects.order_by(???)  # rank1 + rank2

范例
我需要看到这个排序后使用顺序:
排名1:10
排名2:8
排名1:7
排名2:6

zed5wv10

zed5wv101#

你可以使用djangoextra对2列求和,然后使用结果对它们进行排序。

Item.objects.extra(select={'fieldsum':'rank1 + rank2'}, order_by=('-fieldsum',) )

也可以使用F()函数

from django.db.models import F

Item.objects.annotate(fieldsum=F('rank1') + F('rank2')).order_by('-fieldsum')

相关问题