Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django传递闭包生成错误的SQL_Python_Django - Fatal编程技术网

Python Django传递闭包生成错误的SQL

Python Django传递闭包生成错误的SQL,python,django,Python,Django,我有模型 class Person(models.Model): # some fields class Chat(models.Model): people = models.ManyToManyField(Person) # some fields 我想生成一个查询集,其中包含所有与某个给定的人至少共享一次对话的人 我试过了 Person.objects.get(pk=2).chat_set.values_list('people').distinct() 但这

我有模型

class Person(models.Model):
    # some fields

class Chat(models.Model):
    people = models.ManyToManyField(Person)
    # some fields
我想生成一个查询集,其中包含所有与某个给定的人至少共享一次对话的人

我试过了

Person.objects.get(pk=2).chat_set.values_list('people').distinct()
但这给了我
[(2,)]
,它应该是
[(1,),(2,),(3,)]

然后我试着

print(Person.objects.get(pk=2).chat_set
    .values_list('people').distinct().query)
这给了我

从中选择不同的“webapp\u chat\u people”“person\u id”
上的“webapp\u chat”内部加入“webapp\u chat\u people”(
“webapp_chat”。“id”=“webapp_chat_people”。“chat_id”)
其中“webapp\u chat\u people”。“person\u id”=2

这显然是错误的!我如何解决这个问题?我不想做任何形式的“选择n+1”。我使用的是1.7.7版,需要升级吗?

只需复制@RemcoGerlich注释作为答案:

Person.objects.filter(chat__people=Person.objects.get(pk=2))

猜猜看(我需要睡觉,无法测试),Person.objects.filter(chat\uu people=Person.objects.get(pk=2))给出了什么?@RemcoGerlich完全奏效了。好电话。