【发布时间】: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