如何使用值列表过滤Django查询?

时间:2012-02-16 02:57:25

标签: python django django-queryset

我确信这是一项微不足道的操作,但我无法弄清楚它是如何完成的。

必须有比这更聪明的东西:

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查询?

3 个答案:

答案 0 :(得分:445)

来自Django documentation

Blog.objects.filter(pk__in=[1, 4, 7])

答案 1 :(得分:42)

如果您有项目列表,并且想要检查列表中的可能值,则无法使用=

sql查询将类似于SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9],但这不是真的。您必须使用in运算符,因此对于Django提供SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)运算符,您的查询将类似于__in

答案 2 :(得分:4)

来自Django documentation

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>}