Django 子类模型在保存时提供"duplicate key value violates unique constraint"



我有一个包含许多字段的类:

class Parent(models.Model):
id = models.AutoField(primary_key=True)
... many more fields

我创建了一个子类

class Child(Parent):
other_field = models.CharField(max_length=512, blank=True, null=True)
date_featured = models.DateField()

在我迁移并在管理中创建一个Child对象后,我得到了

duplicate key value violates unique constraint "parent_pkey"
DETAIL:  Key (id)=(5) already exists.

我看到过一些类似的问题,建议您修改数据库,但我不能轻易做到这一点。我需要更改子类的id吗?

我能够通过从父模型中删除id来解决这个问题。我认为问题是孩子的id从0开始,这违反了家长pk的唯一性。使用Django内置的主键系统是可行的。

使用SubClass,通常称为"表继承">在引擎盖下,它在孩子和父母之间创建了一对一的关系。

现在,这可能是好的或坏的,取决于你打算如何使用它:

上帝:

  • 您只通过子级处理ChildParent数据,而无需微观管理哪些数据被保存到父级模型中,哪些数据被存储到子级模型中(尤其是如果您使用ModelForm甚至ModelSerializer(

错误:

  • OneToOne relationship处于唯一约束下

这意味着您一次只能有一个关联。例如:Parent(with ID 13)Child(with the ID 25)之间的OneToOne关系必须是唯一的,任何其他Child都不能与Parent(with ID 13)具有另一个OneToOne关联

正如我所说,这是坏或好。。。

用户模型可以被指定为配置文件(用户(的父模型,这隐含地确保了唯一性(没有用户会有多个配置文件(,并且您可以直接通过配置文件模型管理整个CRUD。

但是,如果您需要从Parent类继承以创建多个子类实例。。。那么ForeignKey就是解决方案。(一对多(。

或者你可能已经知道了,事实上。。不知怎的,你的一个子实例没有足够快地转储/删除父关系,这样它就可以在。。。

最新更新