Django MySQL UUID

问题描述 投票:0回答:1

我有一个在默认 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,但创建对象时我可以在视图中执行这些任务。

mysql django uuid
1个回答
0
投票

您需要为您的 uuid 字段设置 max_length。由于 UUID v4 使用 36 个字符,您可以将其设置为 max_length=36(确保数据库中没有更长的值):

uuid = models.TextField(default=uuid.uuid4, editable=False, unique=True, max_length=36)
© www.soinside.com 2019 - 2024. All rights reserved.