如何安全地更改 Django 模型中主键字段的值?

Posted

技术标签:

【中文标题】如何安全地更改 Django 模型中主键字段的值?【英文标题】:How do I safely change the value of the primary key field in a Django model? 【发布时间】:2012-07-17 12:46:09 【问题描述】:

我有一个带有自定义指定主键的 Django 模型:

class ModelA(models.Model):
    my_primary_key = models.CharField(primary_key=True, ...)
    ...

我还有其他模型对此模型有 ForeignKey 引用:

class ModelB(models.Model):
    ref_to_A = models.ForeignKey('ModelA', ...)
    ...

class ModelC(models.Model):
    ref_to_A = models.ForeignKey('ModelA', ...)
    ...

...

我有一些 ModelA 实例,需要为这些实例更改 my_primary_key 的值。

最好的方法是什么?

【问题讨论】:

假设您现在想通过更改主键(并且可能是其他属性)来引用新记录。所以与其改变主键,不如改变其他属性?或者您复制一条记录并更新新记录的外键实例。 这就是我们使用代理键而不是自然键的原因。 【参考方案1】:

不知道你是否还在寻找这个,但也许这个 sn-p 会有所帮助:http://djangosnippets.org/snippets/2915/。

这不是一个很好的数据库设计,因为正是这种问题。通常最好使用 django 的隐式主键并将my_primary_key 创建为唯一字段。

【讨论】:

以上是关于如何安全地更改 Django 模型中主键字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个字段的值验证 Django 模型字段?

Oracle中主键外键索引序列唯一性约束的创建

如何在 Django 中创建一个包含两个字段的主键?

数据库中主键和外键是干嘛用的?

在现有 Django 应用程序中更改主键的最佳方法是啥?

Django 1.4:如何忽略 loaddata 中的字段、模型