【问题标题】:Django / postgresql - model with only foreign keysDjango / postgresql - 只有外键的模型
【发布时间】:2021-01-26 21:59:36
【问题描述】:

我有一个看起来像这样的模型:

class InputTypeMap(models.Model):
    input_type = models.ForeignKey(InputType, on_delete=models.CASCADE)
    training = models.ForeignKey(Training, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    gender = models.ForeignKey(Gender, on_delete=models.CASCADE)

当我尝试使用以下方法创建此模型的实例时:

InputTypeMap.objects.create(input_type=input_type,
                            training=training,
                            gender=gender,
                            category=category)

我遇到了异常

Traceback (most recent call last):
  File "/home/hove/sleipner/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.NotNullViolation: null value in column "id" violates not-null constraint
DETAIL:  Failing row contains (null, Maintenance, Female, MareGielding, No).

在我看来,从错误消息来看,没有生成新条目的 ID 密钥。

这段代码已经按照我的预期运行了很长一段时间,但“突然”开始在本地失败 - 可能是在apt get upgrade 之后。当我使用 sqlite 或 Postgres-10.14 运行相同的代码时,事情会像以前一样继续工作。我不清楚这是否是我的代码(最有可能......)、Django 或 Postgres 中的错误。我正在使用 Django 版本 3.1.2

我有 9.6 版的 Postgres 服务器

【问题讨论】:

  • 这个id 字段可能是(部分)主键,这些不能为NULL。从来没有。
  • 是的——ID键是主键;由于我没有将它添加到模型中,它应该自动创建和填充 - 我想?
  • 只有在调用者省略它或提供DEFAULT作为它的时才会生成。
  • @user422005 更改数据库时是否再次应用迁移或仅更改数据库。
  • 你能提供一个git repo吗?如果没有 MRE,这将很难调试。

标签: django postgresql


【解决方案1】:

很可能,这是一个 primary_key 问题,在我的情况下,我在我的模型中添加了如下内容:

person_id = models.AutoField(primary_key=True)

让我的观点适应它,它解决了它,

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2015-03-07
      • 2019-02-06
      • 1970-01-01
      • 2019-07-19
      • 2015-01-29
      相关资源
      最近更新 更多