我有3张桌子说
Table1 Table2 Category
====== ================= ==============
id, name id, Table1_id, name category_id, Table2_id, name
现在给出了category_id,我必须在Table1中找到属于该category_id的那些名称
我能想到的唯一解决方案就是做出这样的2个查询
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张表(Table1 == 30,000 rows, Table2 and Category == 125000 rows)
的大小,这是正确的做法: -
答案 0 :(得分:1)
从django的角度来看,你代表模型的方式非常模糊。也就是说,在这种情况下很难使用正确的related_name
。但是试试吧。你会想要:
Table1.objects.filter(table2_set__category_set__id=myid).values_list('name')
答案 1 :(得分:0)
Django不会为您的原始查询生成两个查询。如果你执行table2__id__in = similar_ids,Django将自动使用子查询。