我有一些记录,我想根据计算值进行排序。得到了答案over here ......就像这样:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
在这样的Profile类上:
class Profile(models.Model):
...
@property
def reputation(self):
...
不幸的是,通用视图需要一个queryset对象,如果我给它一个列表就会抛出错误。
有没有办法执行此操作以返回查询集
...或
我可以以某种方式将列表转换为查询集吗?在django文档中找不到类似的内容。
我希望不对数据进行反规范化,但我想如果必须的话我会这样做。
似乎获取查询集的唯一方法是,如果可以将所有逻辑都放入sql查询中。
如果不可能,(我认为)你需要对数据进行非规范化
答案 0 :(得分:86)
好的...这篇文章现在已经过时了但你能做的就是获取列表中所有ids
个对象,然后执行model.objects.filter(pk__in=list_of_ids)
答案 1 :(得分:21)
将数据列表转换回查询没有意义。查询对象永远不会保存数据;它只代表对数据库的查询。如果你将列表提交给查询,它将不得不再次获取所有内容,这将是多余的,并且在性能方面非常糟糕。
你能做什么:
reputation
字段;它可能以某种方式在数据库中订购数据。