主键Django模型 - PSQL数据库

时间:2017-01-25 09:45:24

标签: python django postgresql django-models

我有一个PSQL数据库,每天都有投资组合及其价值观。 我正在使用Django来开发一个Web应用程序。我用这个链接: https://docs.djangoproject.com/en/1.10/howto/legacy-databases/

为Django生成模型。我没有在我的数据库或models.py文件中明确定义主键。是否有必要定义主键以便从数据库中检索数据?

如果是这样,有没有办法让多个字段成为主键?在这种情况下,它必须是投资组合ID和日期,因为有多个投资组合和日期。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

没有必要在代码中定义primary key。默认情况下,它由django照顾。它创建名为id的变量作为主键。

但是,您可以使用primary_key = True选项明确定义主键。

实施例

    key1 = models.IntegerField(primary_key=True)

如果要定义复合主键,则可以查看此问题How to create composite primary key

希望这有帮助!

答案 1 :(得分:1)

默认情况下,django为每个表创建一个名为<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <table id="table"> <tbody></tbody> </table>的列,即PK。

您可以使用id使用自己的PK。

此外,您可以使用primary_key=True Meta选项,但仍需要将另一列用作PK。

如果您想要使用复合主键,则需要使用其他第三方解决方案。

答案 2 :(得分:1)

我遇到了同样的问题,并通过如下所示用AutoField替换IntegerField来解决此问题,

order_id = models.IntegerField(primary_key=True)

作者

order_id = models.AutoField(primary_key=True)

它奏效了!

答案 3 :(得分:0)

PostgreSQL 不做自动 pk 字段。所以你需要手动制作。

models.py

test = models.AutoField(primary_key=True)

你不需要 unique=True,因为 pk 总是唯一的 或者您可以使用它来生成自动 pk 字段

settings.py

DEFAULT_AUTO_FIELD='django.db.models.AutoField'