django - 无法将类型整数转换为 uuid

标签 django postgresql django-models django-migrations django-postgresql

我试图运行 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)
运行 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)
老实说,我不知道这是否正常,您可能需要调整生成的迁移。无论哪种情况,您现在都应该到达您想去的地方。

关于django - 无法将类型整数转换为 uuid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64319543/

相关文章:

python - TransportError 400 Elasticsearch 包含大量术语

Django admin,list_editable 中的外键字段

python - 具有 ImageField 属性的 Django UpdateView

postgresql - 使用 PGAdmin 连接到 Heroku DB 时出错

python - Django ManyToManyField 排除

python - 如何将 django 中的 InMemoryUploadedFile 转换为 flickr API 的格式?

node.js - pg-promise ,如何选择 where ... like date%

postgresql - file_fdw 访问远程服务器上的 csv 文件

python - Django Model() 与 Model.objects.create()

django - 不同数据库中的多重身份验证