Django如何为PostgreSQL数据库中现有的许多表定义模型

时间:2019-02-19 10:04:03

标签: django postgresql many-to-many

我有一个具有多对多关系的现有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)

1 个答案:

答案 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