我有一个包含许多字段的类:
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
,通常称为"表继承">在引擎盖下,它在孩子和父母之间创建了一对一的关系。
现在,这可能是好的或坏的,取决于你打算如何使用它:
上帝:
- 您只通过子级处理Child和Parent数据,而无需微观管理哪些数据被保存到父级模型中,哪些数据被存储到子级模型中(尤其是如果您使用ModelForm甚至ModelSerializer(
错误:
OneToOne relationship
处于唯一约束下
这意味着您一次只能有一个父与子关联。例如:Parent(with ID 13)
和Child(with the ID 25)
之间的OneToOne关系必须是唯一的,任何其他Child都不能与Parent(with ID 13)
具有另一个OneToOne关联
正如我所说,这是坏或好。。。
用户模型可以被指定为配置文件(用户(的父模型,这隐含地确保了唯一性(没有用户会有多个配置文件(,并且您可以直接通过配置文件模型管理整个CRUD。
但是,如果您需要从Parent类继承以创建多个子类实例。。。那么ForeignKey就是解决方案。(一对多(。
或者你可能已经知道了,事实上。。不知怎的,你的一个子实例没有足够快地转储/删除父关系,这样它就可以在。。。