django - 无法将类型整数转换为 uuid
问题描述
我试图运行python3 manage.py migrate
,但我得到了这个错误:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django /db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: cannot cast type integer to uuid
LINE 1: ...BLE "core_post" ALTER COLUMN "id" TYPE uuid USING "id"::uuid
我正在使用PostgreSQL
我的models.py: 链接到pastebin
我希望你能帮助我)
谢谢!
解决方案
因此,基本上您在没有显式主键的情况下启动了模型。所以你有一个免费的 AutoField,现在希望它们成为 UUID。
如您所见,Postgres(或我知道的任何数据库)不允许将整数更改为 UUID。所以你需要做一些迁移来获得你想要的状态:
首先将 uuid 字段添加为具有不同名称的普通字段:
import uuid
from django.db import models
class MyModel(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
运行 makemigrations 并迁移。
现在将其设为主键:
class MyModel(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, primary_key=True)
这应该生成一个删除 id 字段并使 uuid 成为主键的迁移(makemigrations 并再次迁移)。
最后(如果你还想):
class MyModel(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
老实说,我不知道这是否正常,您可能需要调整生成的迁移。无论哪种情况,您现在都应该在您想去的地方。
推荐阅读
- c# - 如何使用 C# 替换请求 url 中的参数?
- java - ZipEntry 中的额外字节用于什么?
- dart - 如何将 json_annotation 与 Dart 扩展 ListBase 类一起使用
- insert - 通过 Dafny 实现堆插入(带规范)
- python - 如何使用 PonyORM 动态创建实体?
- flutter - Flutter - 如何在 TabBarView 的主体内导航?
- android - 如何创建可访问的 PrivateKeys?
- julia - Julia函数将秒转换为小时、分钟、秒的问题
- javascript - Next.js Router.push 没有设置任何 req.headers
- azure - CI/CD 时无法在 Azure 上复制文件和文件夹