Python / Django object.filter(pk__in = variable_list)

时间:2014-01-05 14:48:24

标签: python django filter rawsql

我正在进行原始查询,其中我从表中选择id的结果如下所示:

[(517L,), (519L,), (526L,), (537L,), (668L,), (670L,), (671L,), (672L,), (673L,)] 

我需要在__in过滤器中使用这些id来接收正确的对象,这是我的代码 注意我在这里写的原始查询是假的,我的真实查询很复杂,这就是为什么我必须使用原始查询,

from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("SELECT id FROM table1 WHERE rule=1)
property_list= cursor.fetchall()
object_list = table1.objects.filter(pk__in=property_list)

这会导致以下错误:argument must be a string or a number, not 'list'

请告知

1 个答案:

答案 0 :(得分:3)

问题是你有一个元组列表,而不是一个'原始'整数列表,因为fetchall()返回整行,而不是单列。尝试:

pk__in=[p[0] for p in property_list]