【问题标题】:Convert objects into queryset将对象转换为查询集
【发布时间】: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


【解决方案1】:
foo_qs = Foo.objects.filter(user__id__in=[foo.id for foo in foo_list])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-04-23
    相关资源
    最近更新 更多