0

有示例代码:

楷模:

class A(models.Model):
    any attr_A
    ....

class B(A):
    any attr_B
    ....


class C(models.Model):
    a = models.ManyToManyField(A)

意见:

c = C()
b = B()
c.a.add(b) - add B class instance
c.save()

...

a = c.a.all()
a[0].attr_B

但是“a”列表包含 A 类实例,我无法获取 B 类的属性。

如何获得 B 类属性?

4

2 回答 2

0

A和B之间没有关系,只是继承。它应该是:

class A(models.Model):
    any attr_A
    ....

class B(A):
    any attr_B
    ....


class C(models.Model):
     a = models.ManyToManyField(B)

就算是关系,也应该是这样的:

class A(models.Model):
    any attr_A
    ....

class B(models.Model):
    a = models.ForeignKey(A)
    any attr_B
    ....


class C(models.Model):
     a = models.ManyToManyField(A)

接着:

a[0].b.attr_B
于 2013-06-15T13:46:40.947 回答
0

查看文档,在多表继承中访问子类的实例,使用a[0].bwhich 是一个B()实例并且上面有attr_Bs,如果a[0]是 model 的一个实例A
因此a[0].b.attr_B在这里工作。

于 2013-06-15T13:59:59.383 回答