2017-06-04 85 views
0

我正在上使用postgress數據庫的,當我運行它,我得到這個錯誤我的生產系統遷移:Django的postgress - 多個主鍵不允許錯誤

django.db.utils.ProgrammingError: multiple primary keys for table "website_experience" are not allowed

但效果很好對我的開發SQL數據庫。下面是我的工作模式:

class Experience (models.Model): 
    title = models.CharField(max_length = 60) 
    company = models.CharField(max_length = 60) 
    city = models.CharField(max_length = 60) 
    start_date = models.DateField(blank=False, default=datetime.now) 
    end_date = models.DateField(blank=True, null=True) 
    description = models.CharField(max_length = 1000) 
    creative_user = ForeignKey(CreativeUserProfile, models.CASCADE) 

起初,場creative_user(這是我的擴展用戶模型)是一個主鍵,但改變了它是一個CreativeUser之間表達一對多的關係一個ForeignKey有許多工作經驗。

這裏是在遷移之前和進行更改,以ForeignKey的

class Migration(migrations.Migration): 

    dependencies = [ 
     ('website', '0003_auto_20170510_1436'), 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='Experience', 
      fields=[ 
       ('title', models.CharField(max_length=60)), 
       ('company', models.CharField(max_length=60)), 
       ('city', models.CharField(max_length=60)), 
       ('startDate', models.DateField()), 
       ('endDate', models.DateField(blank=True, null=True)), 
       ('creative_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='website.CreativeUserProfile')), 
      ], 
     ), 
] 

後,這表示經驗模型的創建和creative_user是在模型的主鍵。然後使其成爲一個ForeignKey後遷移看起來像:

class Migration(migrations.Migration): 

    dependencies = [ 
     ('website', '0004_experience'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='experience', 
      name='id', 
      field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), 
      preserve_default=False, 
     ), 
     migrations.AlterField(
      model_name='experience', 
      name='creative_user', 
      field =models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='website.CreativeUserProfile'), 
    ), 
] 

正如我說,這對開發,但在遷移DB Postgress認爲我有多個主鍵的所有作品。任何人都可以照亮我在做什麼錯誤?

謝謝。

回答

0

我有同樣的問題,並設法通過從受影響的表創建點刪除所有遷移文件來解決它,然後運行makemigrations並遷移。

您的遷移文件「0004_experience」創建了一個名爲「creative_user」的oneToOneField,並將其設置爲主鍵。 我的猜測是,從onToOne更改爲oneToMany關係要求在稍後的遷移中創建新的唯一字段(自動增加字段「id」並將其設置爲主鍵),因爲「creative_user」不再是唯一的。

由於最新的遷移依賴於它之前的遷移,因此最終有兩個主鍵。 刪除這些衝突的遷移文件會將您排除在外。