小编B. *_*ida的帖子

为什么与自我的多对多关系不能对称

我正在尝试创建一个与自身具有多对多关系的模型,并且这种关系还将具有一个特定的表来存储有关该关系的一些信息,但是我遇到了一些问题。

我试图与不同的模型(如Django 文档)建立多对多的关系所说的,并且在我的应用程序的其他一些地方运行良好。但现在我尝试做这样的事情:

假设我想要一个模型来表示由其他项目制作的对象(称为项目),并且还用于制作其他一些项目。例如,对象 Door 是由木头和锁制成的,但 Door 也将用于制作房屋。我想为我的模型做这样的事情

class Item(models.Model):
    name = models.CharField(max_length=100)
    items = models.ManyToManyField("self",through='IsMadeBy')

class IsMadeBy(models.Model):
    itemResult = models.ForeignKey('Item', related_name='itemResult')
    itemPart = models.ForeignKey('Item', related_name='itemPart')
    amountUsed = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Many-to-many fields with intermediate tables must not be symmetrical.
Run Code Online (Sandbox Code Playgroud)

所以,添加参数

symmetrical=False
Run Code Online (Sandbox Code Playgroud)

对我的关系错误停止。

话虽如此,我想知道这到底是如何运作的。例如,在数据库级别的上下文中,对称意味着什么?如果有人可以举出可能使用 SQL 语句的示例,我将不胜感激,因为现在我的大脑无法看到全局,并且在与自我的多对多关系中真正学会了这种对称关系的概念。

django django-models

5
推荐指数
1
解决办法
563
查看次数

标签 统计

django ×1

django-models ×1