扩展Django模型类(m2m)2级

时间:2011-03-23 14:05:46

标签: django django-models

好的我知道标题听起来真的很混乱,但实际上它很简单。考虑一下:

class A(models.Model):
    field = models.CharField(max_length=10)

class B(models.Model):
    field = models.CharField(max_length=10)
    a_elements = models.ManyToManyField(A)

class C(models.Model):
    field = models.CharField(max_length=10)
    b_element = models.ForeignKey(A)

所以,现在我想要的是用其他字段扩展A的所有实例。例如,对于通过B可用的A的每个实例,我需要一个与之关联的整数。

有一种简单的方法吗?

编辑:

我认为可以将此视为B中A从C到实例的一对多关系的定义,如果这有意义的话......

1 个答案:

答案 0 :(得分:0)

如果您需要使用其他字段扩展A的所有实例,请添加另一个字段。

对于每个A到B都需要字段的示例场景,请使用直通模型。

http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

class A(models.Model):
    field = models.CharField(max_length=10)

class B(models.Model):
    field = models.CharField(max_length=10)
    a_elements = models.ManyToManyField(A, through='B_A')

class C(models.Model):
    field = models.CharField(max_length=10)
    b_element = models.ForeignKey(A)


class B_A(models.Model):
    """
    Custom through model for B.a_elements
    """
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)
    integer = models.IntegerField()


b = B.objects.latest('id')
ab_elements = B_A.objects.filter(b=b).select_related()
# these are your m2m intermediary model instances, 
# which are essentially A instances with an extra field.

for ab in ab_elemements:
    print ab.a # a element
    print ab.integer # integer associated with this a element.

通过你的问题标题,我认为你问了一个关于C的问题(你没有提到)