我先说一下我遇到的问题,如下有四张表,每一张表是另一张表的外键。
四张表时,当我查D表,取A表name,取不出来,不是取不出来值,是用双下划线(__)不出deptname
但是当我用三张表同样操作时,就可以__出deptname。迷惑。。。。。。救。。。我。。。。
class A(models.Model):
dept = models.CharField(primary_key=True)
deptname = models.CharField(max_length=255)
def __str__(self): return self.dept
class Meta(): verbose_name_plural = 'A'
class B(models.Model):
pgid = models.CharField(primary_key=True)
pgname = models.CharField(max_length=255)
fded = models.ForeignKey('A', on_delete=models.CASCADE)
def __str__(self): return self.pgid
class Meta(): verbose_name_plural = 'B'
class C(models.Model):
pid = models.CharField(primary_key=True)
pname = models.CharField(max_length=255)
fpgd = models.ForeignKey('B', on_delete=models.CASCADE )
def __str__(self): return self.pid
class Meta(): verbose_name_plural = 'C'
class D(models.Model):
psid = models.CharField( primary_key=True )
psname = models.CharField(max_length=255)
fpd = models.ForeignKey('C', on_delete=models.CASCADE )
def __str__(self): return self.psid
class Meta(): verbose_name_plural = 'D'
当我想取D表A的deptname时,如下代码
result = D.objects.all()
deptname = result.values('fpd__fpgd__fded__deptname')
此处fpd__fpgd__fded里没有deptname,不可以写成fpd__fpgd__fded__deptname。
我试了将B或C表去掉一个再外键关联,就可以取到最后一张表里的name值。
(假如三张表外键关联,fpd__fpgd__deptname就有值可以取到。)
想问一下大神,外键连续关联后双下划线有次数限制吗?
我这个因为什么当四张表外键关联的时候不能取到name值,而三张表的时候就可以呢。迷惑......
(因为业务需要,必须要有三张主表分别放产品的三种属性,第四张表是产品登录的综合信息。)
完整代码?