【问题标题】:Primary Key Django Model - PSQL Database主键 Django 模型 - PSQL 数据库
【发布时间】:2017-06-10 10:25:09
【问题描述】:

我有一个 PSQL 数据库,其中包含几年来每天的投资组合及其价值。 我正在使用 Django 开发一个网络应用程序。我使用了这个链接: https://docs.djangoproject.com/en/1.10/howto/legacy-databases/

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

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

感谢您的帮助!

【问题讨论】:

    标签: python django postgresql django-models


    【解决方案1】:

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

    models.py

    test = models.AutoField(primary_key=True)
    

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

    settings.py

    DEFAULT_AUTO_FIELD='django.db.models.AutoField'
    

    【讨论】:

      【解决方案2】:

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

      order_id = models.IntegerField(primary_key=True)
      

      通过

      order_id = models.AutoField(primary_key=True)
      

      成功了!!

      【讨论】:

        【解决方案3】:

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

        但是您可以使用primary_key = True 选项显式定义主键。

        示例。

            key1 = models.IntegerField(primary_key=True)
        

        如果你想定义复合主键,那么你可以看看这个问题How to create composite primary key

        希望这会有所帮助!

        【讨论】:

          【解决方案4】:

          默认情况下,django 为每个表创建了一个名为id 的列,即PK。

          您可以通过primary_key=True 使用自己的PK。

          另外,您可以使用unique_together Meta 选项,但您仍然需要使用另一列作为PK。

          如果你想要使用复合主键,你需要使用另一个第三方解决方案。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-02
            • 1970-01-01
            • 2012-03-31
            • 2011-02-27
            • 1970-01-01
            • 2019-03-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多