0

刚从 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 时它不起作用。它告诉我 Contact 没有在这条线上定义
contacts = models.ManyToManyField(Contact)

我更熟悉编译语言。无论如何告诉python联系人类存在,或者更好的是,我缺少一个特殊的语法来定义这种关系。

4

2 回答 2

2

我认为这两个模型都不需要双向多对多,因为它们是一种M:N关系(2 向关系)。

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

contacts = models.ManyToManyField(Contact)

因此,您需要将其用引号括起来才能正常工作

contacts = models.ManyToManyField('Contact')

可以在此处找到相关文档

我会推荐以下型号:

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

于 2013-08-01T15:30:05.220 回答
0

如果你想同时做一个双向多对多,你只需要这样做:

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)

我想这对你有用。

于 2020-08-19T03:01:19.157 回答