2016-03-07 55 views
0

我在互联网上发现了不同的例子,如何处理与现有的数据库模型,如ex1或这里ex2 m2m关系,但我仍然无法解决我得到的错误。 我的模特如下。基本上,手动创建的所有表。我收到以下错误信息: OperationalError: (1054, "Unknown column 'supervisor_project.id' in 'field list'")。 我对unique_together何时使用through仍有些困惑。您是否看到下面模型中的任何错误?表supervisor_project没有id字段,其​​PK实际上由两个FK组成,即代理PK。现有表m2m(通过/ unique_together)

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

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

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

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

+0

谢谢@Alasdair!你将如何继续在这种情况下。你会直接在数据库中手动添加一个'id'字段给每个中间表吗?或者django可以为每个表自动创建一个“id”(在'model.py'中定义)? – Tin

+0

谢谢@Alasdair!管理员现在正在修正之后工作,即手动将ID添加到数据库模型。 – Tin