在Django中定义多对多的双向

时间:2013-08-01 15:26:15

标签: django django-models

刚开始使用Python / Django框架,如果这很愚蠢,那就很抱歉...但我找不到任何解决方案。

class Dealer(models.Model):
    name = models.CharField(max_length=200)
    contacts = models.ManyToManyField(Contact)

class Contact(models.Model):
    name = models.CharField(max_length=200)
    dealers = models.ManyToManyField(Dealer)

我设置了这种关系但是当我运行SyncDB时它不起作用。它告诉我,此行没有定义联系人
    contacts = models.ManyToManyField(Contact)

我对编译语言比较熟悉。无论如何告诉python联系类是否存在,或者更好的是,是否存在一种特殊的语法,用于定义这种关系。

2 个答案:

答案 0 :(得分:2)

我不认为在两个模型中都需要双向ManyToMany,因为它们是M:N关系(双向关系)。

您的问题是,Contact未在执行此代码时定义:

contacts = models.ManyToManyField(Contact)

所以你需要将它包装在引号中以使其起作用

contacts = models.ManyToManyField('Contact')

关于can be found here

的文件

我会推荐以下型号:

class Dealer(models.Model):
    name = models.CharField(max_length=200)
    contacts = models.ManyToManyField('Contact')

class Contact(models.Model):
    name = models.CharField(max_length=200)

它会完全符合您的要求。

您可以在此处阅读ManyToMany关系。相同的链接还介绍了如何处理Reverse m2m queries

答案 1 :(得分:0)

如果您想同时进行两种方式的ManyToMany,则只需要这样做:

class Dealer(models.Model):
    name = models.CharField(max_length=200)
    contacts = models.ManyToManyField('Contact', blank=True)

class Contact(models.Model):
    name = models.CharField(max_length=200)
    dealers = models.ManyToManyField('Dealer', through=Dealer.projects.through, blank=True)

我想它将对您有用。