Django:将外键上的两个表连接到第三个表?

时间:2019-11-18 13:35:12

标签: python django

我有三种型号

class A(Model):
    ...

class B(Model):
    id = IntegerField()
    a = ForeignKey(A)

class C(Model):
    id = IntegerField()
    a = ForeignKey(A)

我想要获得(B.id,C.id)对,其中B.a == C.a。如何使用Django Orm进行联接?

1 个答案:

答案 0 :(得分:1)

Django允许您reverse the lookup的方式与使用__进行正向查找的方式大致相同:

  

它也向后工作。要引用“反向”关系,只需使用模型的小写字母即可。

     

此示例检索所有 Blog 对象,这些对象至少具有一个条目,其标题包含“列侬”:

     

Blog.objects.filter(entry__headline__contains='Lennon')

我认为您可以使用@Daniel Roseman关于将要返回的结果集类型的警告来做类似的事情。

ids = B.objects.prefetch_related('a', 'a__c').values_list('id', 'a__c__id')

与预取有关的内容将在内存较大的情况下提高django的较早版本的性能。