【发布时间】:2020-03-30 17:37:45
【问题描述】:
我有一个对象列表,一个模型包括该对象的 ManyToManyField。 我想获取在该字段中具有相同对象列表的对象。 这意味着 __in 将不起作用,因为他将在列表中的对象之间执行 OR 而不是 AND。 我正在尝试使用 AND Q 查找,但它不起作用(在检查 .query 文本之后,似乎他在字段对象内部执行 AND,而不是对象本身,所以显然字段对象 id 不有两个不同的 id..)
这是我玩过的拦截器
results_query_set[0]
<Results: Results object (2)>
results_query_set[0].users.all()
<QuerySet [<User: test_user>, <User: test_user_2>]>
users
[<User: test_user>, <User: test_user_2>]
users_q
<Q: (AND: ('users', <User: test_user>), ('users', <User: test_user_2>))>
results_query_set.filter(users=users[0])
<QuerySet [<Results: Results object (2)>]>
results_query_set.filter(users=users[1])
<QuerySet [<Results: Results object (2)>]>
results_query_set.filter(users_q)
<QuerySet []>
results_query_set.filter(Q(users=users[0]) & Q(users=users[1]))
<QuerySet []>
结果results_query_set.filter(users_q).query.__str__()重现是
'SELECT "results_table"."id", "results_table"."date", "results_table"."lookup", "results_table"."value" FROM "results_table" INNER JOIN "results_table_users" ON ("results_table"."id" = "results_table_users"."widgetresults_id") WHERE ("results_table_users"."user_id" = 1 AND "results_table_users"."user_id" = 2)
我可以为每个用户链接 .filter,但当然,我想进行一次查询,而不是根据输入的数字进行查询。
【问题讨论】:
-
你用的是什么数据库?
-
@schillingt 抱歉,编辑了标签。 (postgres)
标签: django python-3.x postgresql django-models