python - 新 Postgresql DB 中的 UUID 字段失败 ValidationError: ["'1' is not a valid UUID."]
问题描述
想知道是否有人可以阐明这个错误可能来自什么。我刚刚从 sqllite 迁移到 Postgresql,同时将我的 ID 字段更改为UUID
. 对于大多数模型它都有效,但是我已经隔离了一些导致迁移失败的模型。
错误是:
AttributeError: 'int' object has no attribute 'replace' django.core.exceptions.ValidationError: ["'1' is not a valid UUID."]
正如我所说,这是一个新的数据库,并且不知道有任何代码会在迁移时创建行,因此不确定 1 来自何处。
这个问题看起来非常相似,但是提问者明确设置整数并尝试将其作为UUID
模型
import uuid
class Question(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
痕迹
运行迁移: 应用survey.0001_initial...Traceback(最近一次通话): 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/models/fields/__init__.py”,第 2363 行,在 to_python 返回 uuid.UUID(值) __init__ 中的文件“/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/uuid.py”,第 137 行 hex = hex.replace('urn:', '').replace('uuid:', '') AttributeError:“int”对象没有属性“replace” 在处理上述异常的过程中,又出现了一个异常: 回溯(最近一次通话最后): 文件“manage.py”,第 15 行,在 execute_from_command_line(sys.argv) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/core/management/__init__.py”,第 371 行,在 execute_from_command_line 实用程序.execute() 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/core/management/__init__.py”,第365行,在执行 self.fetch_command(子命令).run_from_argv(self.argv) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/core/management/base.py”,第 288 行,在 run_from_argv self.execute(*args, **cmd_options) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/core/management/base.py”,第 335 行,在执行 输出 = self.handle(*args, **options) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/core/management/commands/migrate.py”,第 200 行,在句柄中 fake_initial=fake_initial, 迁移中的文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/migrations/executor.py”,第 117 行 state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) _migrate_all_forwards 中的文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/migrations/executor.py”,第 147 行 state = self.apply_migration(状态,迁移,fake=fake,fake_initial=fake_initial) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/migrations/executor.py”,第 244 行,在 apply_migration state = migration.apply(state, schema_editor) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/migrations/migration.py”,第 122 行,在应用中 operation.database_forwards(self.app_label,schema_editor,old_state,project_state) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/migrations/operations/fields.py”,第 84 行,在 database_forwards 场地, 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/backends/base/schema.py”,第 407 行,在 add_field 定义,参数 = self.column_sql(模型,字段,include_default=True) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/backends/base/schema.py”,第 152 行,在 column_sql default_value = self.effective_default(field) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/backends/base/schema.py”,第 224 行,在有效默认值中 默认 = field.get_db_prep_save(默认,self.connection) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/models/fields/related.py”,第 936 行,在 get_db_prep_save 返回self.target_field.get_db_prep_save(值,连接=连接) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/models/fields/__init__.py”,第 767 行,在 get_db_prep_save return self.get_db_prep_value(value, connection=connection,prepared=False) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/models/fields/__init__.py”,第 2354 行,在 get_db_prep_value 值 = self.to_python(值) 文件“/Users/jd/.virtualenvs/projectrisk_dev/lib/python3.6/site-packages/django/db/models/fields/__init__.py”,第 2368 行,在 to_python 参数={'值':值}, django.core.exceptions.ValidationError: ["'1' 不是有效的 UUID。"]
解决方案
推荐阅读
- javascript - JavaScript for 循环仅在第一次单击事件时找到子 div 类
- gradle - OpenAPI Generator 从命令行工作,但不能从 Gradle 插件工作
- amazon-web-services - 如何使用 s3cmd 列出所有空文件夹
- javascript - JavaScript DOM 样式在 Angular 中导入动画模块后停止工作
- javascript - 我试图让“技术”这个词只在页面滚动后出现滚动功能词,但它也在顶部 onload 我不想要这个
- python - 计算两个 3D 对象之间最小距离的简单方法
- mysql - 删除 MySQL WHERE id IN (@VARIABLE) 中的记录 -- (2,3,4)
- rasa-nlu - 如何修复错误用户警告:“evaluate_every_number_of_epochs”的值大于“epochs”的值。不会进行评估
- python - 从数据框python中选择2种类型的行
- python - 如何过滤列表中的元素并生成频率表