我有一个具有多对多关系的现有PostgreSQL数据库,它通过如下所示的联接表进行处理。
我希望应用ManyToMany字段类型,这会绕过此联接/中间表吗?如何在我的models.py中正确配置它?我宁愿保留中间表。
# models.py
class Sample(models.Model):
sample_id = models.AutoField(primary_key=True)
...
class JoinSampleContainer(models.Model):
id = models.AutoField(primary_key=True)
container_id = models.ForeignKey(Container, db_column='container_id', on_delete = models.PROTECT)
sample_id = models.ForeignKey(Sample, db_column='sample_id', on_delete = models.PROTECT)
...
class Container(models.Model):
container_id = models.AutoField(primary_key=True)
答案 0 :(得分:2)
在其中一个模型(例如ManyToManyField
)上定义Sample
,并将through
选项指定为documented here:
class Sample(models.Model):
id = ...
containers = models.ManyToManyField(Container, through='JoinSampleContainer', through_fields=('sample_id', 'container_id'),
related_name='samples')
注意:您应该为模型中的字段命名以提高可读性(并使用db_column
指定所使用的DB列)。使用id
代替sample_id
,使用sample.id
代替sample.sample_id
更具可读性。并在直通模型上使用sample
代替sample_id
,分别用container
代替container_id
。