Django的 - 转换列表回查询集[复制]Django的 - 转换列表回查询集[复制](djang

2019-05-14 02:07发布

这个问题已经在这里有一个答案:

  • 一个QuerySet通过聚合字段值 3答案

我有,我想根据计算出的值排序记录了一把。 得到的答案在这里 ......像这样:

sorted(Profile.objects.all(), key=lambda p: p.reputation)

在Profile类是这样的:

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...

不幸的是,一般的观点是期待一个QuerySet对象,如果我给它一个列表抛出一个错误。

有没有办法做到这一点,它返回一个查询集

要么...

我可以转换列表到查询集不知何故? 找不到像在Django文档任何东西。

我希望不要进行非规范化的数据,但我想我会,如果我不得不这样做。

更新/回答:

似乎得到查询集回来的唯一方法是,如果你可以得到所有你的逻辑到SQL查询。

当这是不可能的,(我认为),你需要进行非规范化的数据

Answer 1:

有一个在转换数据列表回查询是没有意义的。 查询对象从不保存数据; 它只是代表了数据库查询。 这将有如果您做了您的列表,查询来再次读取一切,那将是多余的,非常糟糕的表现,明智的。

你可以做什么:

  • 描述如何reputation场计算; 它可能可以在数据库中以某种方式对数据进行排序。
  • 修改视图不需要查询对象。 如果它需要做额外的过滤等本应任何排序之前完成,因为订货会采取较少的条目(和较少的数据从数据库中获取。)更短的时间所以,你可以在过滤查询对象发送到排序功能将它发送到模板之前(这不应该关心它是否是一个查询或列表。)


Answer 2:

好吧...这个职位是现在老了,但你可以做的是让所有的ids对象的列表,然后执行model.objects.filter(pk__in=list_of_ids)



文章来源: django - convert a list back to a queryset [duplicate]