我有一个在默认 sqlite 数据库中工作的 django 模型字段:
uuid = models.TextField(default=uuid.uuid4, editable=False, unique=True)
.
但是,当我尝试迁移到MySQL时,出现错误:
django.db.utils.OperationalError: (1170, "BLOB/TEXT column 'uuid' used in key specification without a key length")
我尝试的第一件事是删除 unique=True
,但我得到了同样的错误。接下来,因为我有另一个字段(已成功迁移):
id = models.UUIDField(default=uuid.uuid4, editable=False)
我尝试将 uuid 更改为 UUIDField,但我仍然遇到相同的错误。最后我把uuid改成了:
uuid = models.TextField(editable=False)
但是我在迁移时仍然遇到同样的错误(DROP 所有表,makemigrations,migrate --run-syncdb)。理想情况下,我想要一个 UUIDField 或 TextField,默认值 = uuid.uuid4,editable = False,unique = True,但创建对象时我可以在视图中执行这些任务。
您需要为您的 uuid 字段设置 max_length
。由于 UUID v4 使用 36 个字符,您可以将其设置为 max_length=36
(确保数据库中没有更长的值):
uuid = models.TextField(default=uuid.uuid4, editable=False, unique=True, max_length=36)