在many_to_many字段中从子类获取属性

时间:2013-06-15 13:22:36

标签: python django models

有示例代码:

模型:

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类属性?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

检查the doc,访问多表继承中的子类实例,使用a[0].b实例,B()实例,其上有attr_B个,如果a[0]是模型A的实例 因此a[0].b.attr_B在这里工作。