我知道这是一个简单的操作,但我不知道它是怎么做的。
肯定有比这更聪明的方法
ids = [1, 3, 6, 7, 9]
for id in ids:
MyModel.objects.filter(pk=id)
我想让他们都在一个查询类似的东西:
MyModel.objects.filter(pk=[1, 3, 6, 7, 9])
我如何用一个值列表过滤Django查询?
我知道这是一个简单的操作,但我不知道它是怎么做的。
肯定有比这更聪明的方法
ids = [1, 3, 6, 7, 9]
for id in ids:
MyModel.objects.filter(pk=id)
我想让他们都在一个查询类似的东西:
MyModel.objects.filter(pk=[1, 3, 6, 7, 9])
我如何用一个值列表过滤Django查询?
当前回答
你可以这样做。
Blog.objects.filter(pk__in=[1, 4, 7])
但是你要小心。如果列表中只有一个元素是No-integer,它就不起作用。 例如,这是一个异常。
Blog.objects.filter(pk__in=[1, 4, 'aa', 7])
其他回答
来自Django文档:
Blog.objects.filter(pk__in=[1, 4, 7])
你可以这样做。
Blog.objects.filter(pk__in=[1, 4, 7])
但是你要小心。如果列表中只有一个元素是No-integer,它就不起作用。 例如,这是一个异常。
Blog.objects.filter(pk__in=[1, 4, 'aa', 7])
当你有一个项目列表,你想从列表中检查可能的值,那么你不能使用=。
sql查询将像SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9],这是不正确的。你必须使用in操作符,所以你的查询将像SELECT * FROM mytable WHERE id在(1,3,6,7,9)为Django提供__in操作符。
来自Django文档:
Blog.objects.in_bulk([1])
{1: <Blog: Beatles Blog>}
Blog.objects.in_bulk([1, 2])
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>}
Blog.objects.in_bulk([])
{}
Blog.objects.in_bulk()
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>}
Blog.objects.in_bulk(['beatles_blog'], field_name='slug')
{'beatles_blog': <Blog: Beatles Blog>}