2016-03-07 31 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