django – 将列表转换回查询集

我有一些我想根据计算值sorting的logging。 在这里得到答案…像这样:

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

在一个像这样的configuration文件类:

 class Profile(models.Model): ... @property def reputation(self): ... 

不幸的是,通用视图期望一个查询集对象,并且如果我给它一个列表就会抛出一个错误。

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

要么…

我可以以某种方式将列表转换为查询集吗? 在django文档中找不到类似的东西。

我希望不要使数据非规范化,但是我想如果必须的话。

更新/回答:

看起来回到查询集的唯一方法是如果你可以把你所有的逻辑到sql查询。

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

将数据列表转换回查询没有意义。 查询对象从不保存数据; 它只是代表对数据库的查询。 如果您将列表添加到查询中,则必须再次获取所有内容,而这将是多余的,而且性能方面非常糟糕。

你可以做什么:

  • 描述reputation领域是如何计算的; 可能以某种方式在数据库中sorting数据。
  • 修改视图不需要查询对象。 如果需要进行额外的过滤等等,这应该在任何sorting之前完成,因为sorting将花费较less的时间和较less的条目(并且从数据库中取出较less的数据)。因此,您可以将筛选的查询对象发送到sorting函数发送给模板之前(不应该在乎它是一个查询还是一个列表)。

好的…这个post现在是老了,但你可以做的是获得列表中的所有对象的ids ,然后执行一个model.objects.filter(pk__in=list_of_ids)