Python 在django orm中使用In语句
我有三张桌子Python 在django orm中使用In语句,python,sql,django,Python,Sql,Django,我有三张桌子 Table1 Table2 Category ====== ================= ============== id, name id, Table1_id, name category_id, Table2_id, name 现在给定一个类别id,我必须在表1中找到属于该类别id的名称 我能想到的唯一解决办法就是做两个这样的查询 similar_ids = Table2.o
Table1 Table2 Category
====== ================= ==============
id, name id, Table1_id, name category_id, Table2_id, name
现在给定一个类别id,我必须在表1中找到属于该类别id的名称
我能想到的唯一解决办法就是做两个这样的查询
similar_ids = Table2.objects.filter(category__category_id=_cat_id).values_list('id')
similar_names = Table1.objects.filter(table2__id__in=similar_ids).values_list('name').distinct()
这是一种在单个查询中实现的方法
另外,考虑到3个表的大小(表1==30000行,表2和类别==125000行)
正确的做法是:
从django的角度来看,您表示模型的方式相当模糊。也就是说,在这种情况下很难使用正确的
相关名称。但是让我们试试看。您希望:
Table1.objects.filter(table2_set__category_set__id=myid).values_list('name')
Django不会为原始查询生成两个查询。如果您使用table2\uuuu id\uuuu in=similor\u id,Django将自动使用子查询