使用注释函数的高效Django查询

时间:2017-07-03 15:56:04

标签: mysql django database

表A包含字段:

id_1(int)|id_2(int)

我在id_2上写了一个查询:

blocked_users = bl_.objects.filter(id_2=request.user.id);
#for a single value of id_2,there are multiple entries,like:
 id1|id2
 2  |3
 5  |3
 7  |3

表B中包含字段:

id_3(int)|id4(int)

现在,对于变量 blocked_users 中的每个 id_1 ,都有 id3 在表B中,我想访问:

table B:
id3|id4
2  |90 
5  |89
7  |87

我知道可以用for循环来完成,但有没有更好的解决方案(例如:通过 annotate 函数)?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用values_list()从表A中获取id_1的列表。

blocked_users = bl_.objects.filter(id_2=request.user.id).values_list('id_1',flat=True);

然后在您的表上查询与您的blocked_users列表中的id_1值之一匹配的所有行。

result=B.objects.filter(id_3__in=blocked_users)