gpt4 book ai didi

python - 带有额外字段的 Django ManyToMany 字段不会显示在两个关系上

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:08 25 4
gpt4 key购买 nike

我有一个类 Assembly

class Assembly(models.Model):

room = models.ForeignKey("Room", related_name="assemblies")
name = models.CharField(max_length=200)
number = models.IntegerField()
position = models.CharField(max_length=200, blank=True)
components = models.ManyToManyField("material.Component", through="m2m_Assembly_Components")
connections = models.ManyToManyField("Assembly", through="Connection")
category = models.ForeignKey("Category", default=0)
notes = models.TextField(blank=True)

在其自身实例之间具有多对多关系(连接)。我使用了一个中间表 Connection,这样我就可以在 Assembly 的两个实例之间建立连接。

class Connection(models.Model):

source = models.ForeignKey("Assembly", related_name="source_assembly", null=True)
destination = models.ForeignKey("Assembly", related_name="destination_assembly", null=True)
length = models.IntegerField(null=True, blank=True)

如果我有两个程序集,比方说 A 和 B,我通过定义一个新的连接来连接它们,其中 A 作为源,B 作为目标,我得到 B 作为 A 的连接 (A.connections.all() ),但我没有将 A 作为 B 的连接。

如果我不使用中间表,只使用 models.ManyToManyField("Assembly"),我将 A 作为 B 的连接,将 B 作为 A 的连接。

我的问题是什么?

最佳答案

我认为您需要指定 through_fields ManyToManyField 的参数。

当 Django 自动生成您的直通模型时,它知道其中的两个 ForeignKey 中的哪一个对应于关系的“本地”端,哪个是“远程”端。但是,当您指定自定义中介模型时,这会变得更加困难。有可能 Django 只是将中间模型中的第一个 ForeignKey 指向正确的目标模型,在这两种情况下恰好是 source 这里(虽然我不是确保确实如此,如果是,则可能是错误)。

尝试查看使用 through_fields=('source', 'destination') 是否有帮助。

关于python - 带有额外字段的 Django ManyToMany 字段不会显示在两个关系上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35645941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com