编程语言
首页 > 编程语言> > python-带有额外字段的Django ManyToMany字段在两种关系中均不显示

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