首页 > 解决方案 > 在 Django (Django 3.0) 中将现有 id 转换为 uuid 后修复错误“格式错误的十六进制 UUID 字符串”

问题描述

我创建了一个带有初始 IntegerField 主键的表,后来将 id 更改为 UUIDField。现在这引发了“格式错误的十六进制 UUID 字符串”,我猜是因为诸如“1”之类的数字不是有效的 UUID 值。在更新 django 应用程序的 models.py 文件时,有谁知道在代码中解决这个问题的简洁方法?

标签: pythondjangopython-3.xuuiddjango-3.0

解决方案


在此之前,请仔细检查您是否在此模型上使用 Cascade 没有任何外键。然后,而不是改变类型id = models.IntegerField()

  • 创建一个新字段uuid = models.UUIDField(default=uuid.uuid4, primary=True)(默认将设置现有行的字段)
  • 进行迁移
  • 删除id字段
  • 进行迁移
  • 将该uuid字段重命名为id
  • 进行迁移
  • 迁移

但是,您应该知道删除id字段和/或命名字段uuid不是强制性的,保留两者通常是个好主意。


推荐阅读