无法将类型整数转换为 uuid

Cannot cast type integer to 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: Link to 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)

运行 进行迁移并迁移。

现在让它成为主键:

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)

老实说,我不知道这是否可行,您可能需要调整生成的迁移。无论哪种情况,您现在都应该到达您想去的地方。