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)