python-带有额外字段的Django ManyToMany字段在两种关系中均不显示
作者:互联网
我有一堂课
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)
在其自身的实例(连接)之间具有ManyToMany Realtionship.
我使用中间表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,然后通过定义一个新的Connection(使用A作为源,B作为目标)来连接它们,我将B作为A的连接(A.connections.all()),但是我不知道不能将A作为B的连接.
如果我不使用中间表,则只需一个models.ManyToManyField(“ Assembly”),我将A作为B的连接,将B作为A的连接.
我这是什么问题
解决方法:
我认为您需要为ManyToManyField指定through_fields
参数.
当Django自动生成直通模型时,它会知道其中的两个ForeignKey中的哪一个对应于关系的“本地”端,而哪一个是“远程”端.但是,当您指定自定义中介模型时,这会变得更加困难. Django可能只将中介模型中的第一个ForeignKey指向正确的目标模型,在两种情况下,这恰好都是源代码(尽管我不确定情况是否如此,如果确实如此,则可能是一个错误).
尝试查看是否使用through_fields =(‘source’,’destination’)有帮助.
标签:django-orm,many-to-many,python,django 来源: https://codeday.me/bug/20191027/1943376.html