现有表格的m2m(通过/ unique_together)

时间:2016-03-07 10:48:20

标签: django django-models m2m

我在互联网上找到了关于如何处理与现有数据库模型的m2m关系的不同示例,例如ex1ex2,但是我仍然无法解决我得到的错误。 我的模型如下所示。基本上,所有手动创建的表。 我收到以下错误消息: OperationalError: (1054, "Unknown column 'supervisor_project.id' in 'field list'")。 关于何时将unique_togetherthrough一起使用,我仍然感到有些困惑。您是否在下面的模型中看到任何错误?表supervisor_project没有id字段,其PK实际上由两个FK组成,即代理PK。

class Supervisor(models.Model):
    name = models.CharField(max_length=45, blank=True, null=True, help_text="Name, e.g. John Smith")

    class Meta:
        managed = False
        db_table = 'supervisor'

    def __unicode__(self):
        return self.name

class Project(models.Model):
    title = models.CharField(max_length=45, blank=True, null=True)
    supervisors = models.ManyToManyField(Supervisor, through='SupervisorProject', through_fields=('project', 'supervisor'))

class SupervisorProject(models.Model):
    supervisor = models.ForeignKey('Supervisor', on_delete=models.CASCADE)
    project = models.ForeignKey('Project', on_delete=models.CASCADE)

    class Meta:
        managed = False
        db_table = 'supervisor_project'
        unique_together = (('supervisor', 'project'),)

1 个答案:

答案 0 :(得分:1)

Django要求每个模型只有一个主键字段。它还不支持多列主键。

由于您尚未在SupervisorProject模型上明确定义主键,因此Django假定存在automatic primary key field id。当它在查询中包含id字段时,您会收到错误,因为它不存在。

如果可能,我会为每个中间表添加一个自动递增的id列。没有办法让Django自动将列添加到表中。您已设置managed=False,因此Django希望您管理数据库表。