gpt4 book ai didi

django - 如何在维护外键和多对多关系的同时将 Django PostgreSQL 数据库模型的主键还原为 AutoField

转载 作者:行者123 更新时间:2023-11-29 12:07:20 24 4
gpt4 key购买 nike

我目前有一个 Django 支持的生产网络应用程序,它包含多个模型,位于 Postgresql 数据库 (Google Cloud SQL) 之上

在初始设置期间,其中一个模型设置如下:

class ExampleModel(models.Model):
id = models.CharField(max_length=60, unique=True, primary_key=True)
new_id = models.CharField(max_length=60, unique=True, null=True, db_index=True)
name = models.CharField(max_length=300, db_index=True)
tags = models.ManyToManyField(Tag, blank=True)

id 字段包含一个唯一 ID,例如:AB123456789。

后来我意识到这是一个错误,我想将主键字段恢复为标准的自动递增自动字段,而是使用“new_id”字段来存储唯一 ID。

有人可以指导我如何进行此更改并执行必要的数据库迁移吗?目前在上述模型中使用 id 字段的其他模型中有许多外键字段需要更改。正如您在上面看到的,该模型和标签模型之间也存在多对多字段。

我尝试从我的 models.py 文件中删除 id 字段并迁移 - 它最初给出了一个链接到空字段和默认值的错误,所以我在终端窗口中设置了一个虚拟默认值并在迁移文件中删除了它。

数据库成功删除了 id 字段并生成了一个新的 Autonumber 主键字段,但是迁移后没有保留多对多或外键关系。我已经回滚到以前版本的数据库。

最佳答案

通常这将是您的方法。步骤 1-4 可以合并到一个部署中。步骤5-7进入另一个。那么8-9就是决赛了。

  1. 创建新的自动字段。
  2. 在模型上创建新的 FK 可空关系
  3. 更新所有创建相关模型的代码以填充两个 FK
  4. 通过脚本填充所有空 FK 字段
  5. 使新的外键字段不可为空
  6. 使旧 FK 可以为空。
  7. 从代码库中删除旧的 FK 用法
  8. 迁移以删除旧 ID 字段和 FK。
  9. (可选)将自动字段重命名为 ID 并可能使用 Django 的内置字段。

关于django - 如何在维护外键和多对多关系的同时将 Django PostgreSQL 数据库模型的主键还原为 AutoField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com