这是this分的跟进问题.
我有app1/models.py
个:
class A(models.Model):
id = models.IntegerField(primary_key=True)
text = models.CharField(max_length=20)
class B(models.Model):
fid = models.ForeignKey(A, models.CASCADE)
text = models.CharField(max_length=20)
class C(models.Model):
fid = models.ForeignKey(A, models.CASCADE)
text = models.CharField(max_length=20)
和app2/models.py
:
from app1.models import A
class D(models.Model):
fid = models.ForeignKey(A, models.CASCADE)
text = models.CharField(max_length=20)
我希望得到A.text
-B.text
-C.text
-D.text
,A.id == B.fid == C.fid == D.fid == 1
在哪里.从提到的问题中,我能够使用以下命令检索前3列:
B.objects.filter(fid=1).values('text', 'fid__text', 'fid__c__text') # B.text, A.text, C.text
然而,使用这个查询我得不到D.text
.我知道我可以对D
进行过滤,然后手动计算,但我期待着一种更具Djangoic风格的方式.
(在多匹配的情况下,将行相乘,因此如果B
中有2行与给定的fid
匹配,C
、D
中有3、4行,则总共返回24行.)
我们AreStarsDust和nigel222的答案都很棒,值得一读.