使用pythonlis对Django queryset排序

2024-10-02 12:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个

Model Car(self.Models)
# a bunch of features here

然后在我的视图.py,我得到了所有的车并计算了一个分数:

^{pr2}$

然后在我的模板中遍历allCars以显示它们;使用与我一起返回的查询的顺序,得到主键排序,因此

  1. A
  2. B
  3. C
  4. D

但是,我想知道是否有一种方法可以使用我在视图中计算的列表来排序queryset,这将产生

  1. B
  2. C
  3. A
  4. D

所以做一些类似的事情

allCars.order_by(scoreList)

Tags: ofpyself视图模板modelhere排序
1条回答
网友
1楼 · 发布于 2024-10-02 12:37:44

首先,为了回答您的问题,您不能使用ORM/sql对从具有复杂逻辑的记录中派生的内容进行排序,除非它只是纯数学,数据库在某种程度上可以做到这一点。在

下一个选择是使用python内置的排序。但是,你不能用一个函数来排序,这个函数是“全部接受”和“吐出所有”,这意味着你当前的函数正在获取一个完整的列表和计算出的分数,并返回所有的分数,因为你不知道什么分数对应于哪辆车。在

我将使用模型上的一个函数来计算分数,然后相应地对记录进行排序:

class Car(models.Model):
    @property
    def compute_score(self):
      return a_score_based_on_current_car

cars = Car.objects.all()
cars = sorted(cars, key=lambda car: car.compute_score)

相关问题 更多 >

    热门问题