Search code examples
pythondjangomodels

Getting attributes from child class in many_to_many fields


there is sample code:

models:

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

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


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

views:

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

...

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

But "a" list contains A class instances and I can't get attributes for class B.

How I can get class B attributes?


Solution

  • There is no relation between A and B, its just inheritance. It should be:

    class A(models.Model):
        any attr_A
        ....
    
    class B(A):
        any attr_B
        ....
    
    
    class C(models.Model):
         a = models.ManyToManyField(B)
    

    Even if it would be a relationship, it should be that way:

    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)
    

    and then:

    a[0].b.attr_B