2014-02-23 87 views
0

當我期運用django.db.backends.postgresql_psycopg2和運行manage.py syncdb,以下錯誤引發Django的postgress:多個主鍵不允許

django.db.utils.ProgrammingError: multiple primary keys for table "token_place" are not allowed 
LINE 3:  "signatureid" integer NOT NULL PRIMARY KEY REFERENCES "s... 

型號:

class TokenPlace(models.Model): 
    token = models.ForeignKey(Token, db_column='tokenid', primary_key=True) 
    signature = models.ForeignKey(Signature, db_column='signatureid', primary_key=True) 
    place = models.IntegerField(primary_key=True) 

    class Meta: 
     db_table = 'token_place' 

我的模型正確地mysql但我必須工作部署它在postgres

如何解決這個問題?

+0

錯誤很明顯不是嗎?只要刪除其中一個主鍵,它就會重新工作。是否有你想要多個主鍵的原因? – Wolph

+0

是的。數據庫設計需要多個主鍵,我不能更改數據庫設計。 – seyed

+1

檢查您是否可以使用[surrogate key](http://en.wikipedia.org/wiki/Surrogate_key)並將'(token,signature)'設置爲[unique together](https://docs.djangoproject)。 COM/EN /開發/ REF /模型/選項/#獨特在一起)。 – danihp

回答

1

在閱讀你的答案後,我終於明白了這個問題,你正在尋找Django中的複合鍵。不幸的是,這還不支持Django。如果你需要它有幾個選項:

  1. 嘗試Django的複合鍵的項目:https://github.com/simone/django-compositekey

  2. 使用此頁上提供的補丁和解釋的支持添加到Django的:https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys

  3. 使用SQLAlchemy(http://www.sqlalchemy.org/)進行查詢,因爲它確實支持此操作。

  4. 在Django中使用單個主鍵列,並從/中讀/寫一個可寫視圖,該視圖與後臺的實際表進行通信。