我得到了一个这样的清单
a = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
该列表与存储在我们称为 Books 的 django 模型中的 id 相匹配。
我正在尝试返回列表中带有 id 的图书查询集。我正在考虑使用 Q 对象并通过做这样的事情来抓住它们
Books.objects.filter(Q(id = 1) | Q(id=2) | Q(id=3) | Q(id=4))
现在我会像这样使用索引:
Books.objects.filter(Q(id = a[0]) | Q(id=a[1]) | Q(id=a[2]) | Q(id=a[3]))
但是,这些列表的长度将在 30 左右变化,并且对索引进行硬编码将不起作用,并且对查询进行硬编码将无法满足不同长度的列表。
可以走这条路吗?如果是这样,我如何才能完成返回 ID 与列表匹配的书籍?
您应该在此处使用__in查找 [Django-doc]:
Books.objects.filter(pk__in=a)Run Code Online (Sandbox Code Playgroud)
正如文档所说:
在给定的迭代中;通常是
list,tuple, 或queryset。这不是一个常见的用例,但接受字符串(可迭代)。