2017-03-23 80 views
0

我使用Django與MySQL我一直在使用命令inspectdb從現有的MySQL數據庫中創建models.py它有如下的模型:未知列「ModelName.id」在「字段列表」」

class Participationdata(models.Model): 
    userid = models.ForeignKey('Volunteer', models.DO_NOTHING, db_column='UserId') # Field name made lowercase. 
    eventid = models.ForeignKey('Events', models.DO_NOTHING, db_column='EventId') # Field name made lowercase. 
    ptrflag = models.IntegerField(db_column='PtrFlag', blank=True, null=True) # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'ParticipationData' 
     unique_together = (('userid', 'eventid'),) 

我已經成功地利用該模型插入的數據到數據庫中,但它顯示的錯誤,如在選擇數據:?

django.db.utils.OperationalError: (1054, "Unknown column 'Participationdata.id' in 'field list'") 

我應該如何解決這個

+0

在[使用現有的數據庫Django的「未知的列X.id」錯誤的可能重複](http://stackoverflow.com/questions/4192409/unknown-column-x-id-error-in-django-using-現有的數據庫) –

+0

沒有主鍵。 –

+0

在數據庫中,我已將複合鍵定義爲'主鍵(userid,eventid)'。所以我很困惑現在該怎麼辦 – Rajadip

回答

1

你在Participationdate表中有id字段嗎?

+0

不,我不知道。這些模型是使用'inspectdb'從現有數據庫創建的。 – Rajadip

+0

當您沒有手動設置主鍵時,Django會自動創建'id'字段。你不能顯式設置組合鍵 - 「unique_together」是某種技巧。由於id列在數據庫中不存在,所以在選擇時(也在其他操作上)出現錯誤。但Django認爲存在。您應該考慮使用原始SQL查詢並僅在存在'userid','eventid','ptrflag'的列上選擇。 – szymon

+0

使用原始的sql給出錯誤'django.db.models.query_utils.InvalidQuery:原始查詢必須包含主鍵 ' – Rajadip

1

通常您會在您的eventid字段上設置primary_key = True,因此Django將其用作默認id。看看Custom id field in Django model的答案

但是它是ForeignKeyField,所以你必須在你的數據庫和模型中添加id列。您可以刪除managed = False(默認爲True),然後:

  1. 創建模型和migrate --fake-initial遷移(因爲你有表已經見多:https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-migrate-fake-initial
  2. 添加AutoField id到模型
  3. 運行makemigrations和往常一樣migrate

這樣django使用您已有的表,但您可以通過模型修改它。

+0

我可以在這個字段中使用primary key = true存儲多個eventid嗎? – Rajadip

+0

對不起,沒有注意到它是ForeignKey。然後你應該添加id字段到模型/數據庫。現在編輯答案... –

+0

有沒有辦法做到這一點,而無需添加ID字段? – Rajadip

相關問題