Django-postgres:不允许使用多个主键

时间:2014-02-23 20:41:01

标签: django postgresql django-models

当我使用django.db.backends.postgresql_psycopg2并运行manage.py syncdb时,会出现以下错误

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

中部署它

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在阅读完答案后我终于得到了问题,你正在寻找Django中的复合键。不幸的是,Django还没有支持。如果您需要它,有几个选择:

  1. 尝试使用Django Composite Key项目:https://github.com/simone/django-compositekey

  2. 使用此页面上提供的修补程序和说明向Django添加支持:https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys

  3. 使用SQLAlchemy(http://www.sqlalchemy.org/)进行查询,因为它可以正确支持。

  4. 在Django中使用单个主键列,并从/向可写视图读取/写入,该视图与后台中的实际表进行通信。