Django m2m模型与其自身的关系与额外的属性

时间:2015-05-29 18:05:35

标签: django django-models many-to-many

我尝试创建一个具有多对多自我关系的模型,我把它放在我的代码中:

class Person(models.Model):
    name = models.CharField(max_length=50)
    shape_clm = models.ManyToManyField("self", through='Friend',                                                                symmetrical=False) 

    def __str__(self):
        return self.name


class Friend(models.Model):
    pers_one = models.ForeignKey(Person)
    pers_two = models.ForeignKey(Person)
    type = models.CharField(max_length=150)

但是当我尝试将模型迁移到数据库时,会引发以下错误:

Friend.pers_one: reverse accessor for Friend.pers_one clashes with reverse accessor for Friend.pers_two

我使用Postgres作为数据库服务器,我怎么能建立这个m2m关系?

2 个答案:

答案 0 :(得分:0)

您需要添加related_name关键字参数,否则ORM无法告诉您如何引用任何一个字段。

class Friend(models.Model):
    pers_one = models.ForeignKey(Person, related_name='pers_ones')
    pers_two = models.ForeignKey(Person, related_name='pers_twos')

答案 1 :(得分:0)

related_name ModelClass中向ForeignKey添加Friend个参数:

class Friend(models.Model):
    pers_one = models.ForeignKey(Person, related_name="friends_one")
    pers_two = models.ForeignKey(Person, related_name="friends_two")
    type = models.CharField(max_length=150)

有关related_name的详细信息,请查看docs