【发布时间】:2021-06-04 12:26:08
【问题描述】:
可能这是一个糟糕且 db 昂贵的想法,但有没有办法将对象列表转换回查询集?
foo_list = [foo1, foo2, foo3, ...]
类似:foo_qs = queryset(foo_list)
这样我可以返回分页查询集??
已编辑
到目前为止。 . .
id_list = [foo.id for foo in foo_list]
foo_qs = Foo.objects.filter(user__id__in=id_list)
【问题讨论】:
-
我认为你到目前为止所尝试的应该有效。您能否告诉我们您的方法存在的问题。
-
进行的额外查询与 id_list 中唯一元素的长度一样多,对于重复元素,我猜它使用缓存
-
unique_ id_list = list(set(str(id_list)))这样您就可以从列表中删除重复的元素,然后将其传递给查询集。foo_qs = Foo.objects.filter(user__id__in=unique_ id_list) -
如果您正在寻找分页,那么在这种情况下,您可以参考 DRF 文档
https://www.django-rest-framework.org/api-guide/pagination/。 -
重复在这种情况下没有任何区别(没有额外的数据库查询),因为它们已经被缓存了。我的意思是 id_list 中的每个元素都有额外的数据库查询。由于我已经有了这些对象,我希望有一种方法可以将它们转回查询集,而无需对 db 进行任何查询或至少进行非常小的查询。
标签: django django-rest-framework django-queryset