我有一些记录要根据计算值排序。在这里得到答案…就像这样:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
在像这样的Profile类上:
class Profile(models.Model): ... @property def reputation(self): ...
不幸的是,通用视图期望有一个queryset对象,如果我给它一个列表,则会抛出一个错误。
有没有一种方法可以返回查询集
要么…
我可以以某种方式将列表转换为查询集吗?在django文档中找不到类似的内容。
我希望不要对数据进行非规范化,但是我想如果需要的话,我会的。
更新/回答: 看来,取回一个查询集的唯一方法是是否可以将所有逻辑都放入sql查询中。
如果不可能,(我认为)你需要对数据进行规范化
将数据列表转换回查询没有任何意义。查询对象从不保存数据。它仅表示对数据库的查询。如果将列表添加到查询中,它将不得不再次获取所有内容,这将是多余的并且在性能方面非常糟糕。
你可以做什么:
reputation
好的…这篇文章现在已经很旧了,但是你可以做的是获取ids列表中的所有对象,然后执行model.objects.filter(pk__in=list_of_ids)
ids
model.objects.filter(pk__in=list_of_ids)