情况:
我们有两张表,X和Y。表X使用逻辑删除。有一个字段Y从X指向一条记录。
问题:
当一个表X的记录被逻辑删除并且我们尝试创建一个新记录Y指向一个"新"X(或重新绑定)时,我们会发生重复记录错误。原因是Django会自动在OneToOneField的列上添加UNIQUE约束。
我的"替代解决方案":
我考虑覆盖OneToOneField的__init__方法来设定unique=False(让它实际上成为一个ForeignKey)。然后,我打算在模型的Meta类中添加一个UniqueConstraint约束,将ForeignKey和deleted_at列联系起来。
目标:
由于持久层需要严格的"一对一"行为(通过类似于模型小写名来访问关联对象、特定的连接逻辑等),从而为每个ForeignKey变更所有的逻辑都非常痛苦。
问题:
有人在这样的“技巧”中遇到过吗?在ORM中存在哪些潜在后果,尤其是在查找或预查询时,OneToOneField在数据库级别不严格唯一,但通过索引组合被限制。如果一个关系非严格的唯一性在 OneToOneField时会不会在 ORM 中引起一些复杂的问题。
评论 (0)