如何使用 django 自动创建 uuid 列

Posted

技术标签:

【中文标题】如何使用 django 自动创建 uuid 列【英文标题】:How can auto create uuid column with django 【发布时间】:2016-03-19 18:40:02 【问题描述】:

我正在使用django为mysql创建数据库表,我希望它可以创建一个类型为uuid的列,我希望它可以自己生成uuid,也就是说每次插入一条记录,我不需要为模型对象指定一个 uuid。我该怎么做,谢谢!

【问题讨论】:

【参考方案1】:

如果你使用 Django >= 1.8,你可以use a UUIDField:

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

传递default = uuid.uuid4 会使用随机 UUID 自动填充新记录(但请注意,这将在 Python 代码中完成,而不是在数据库级别)。


如果你使用的是旧版本的 Django,你可以升级,或者use django-extensions, which provides a UUIDField as well。

【讨论】:

感谢您的回答,但请注意,这将在 Python 代码中完成,而不是在数据库级别是什么意思? @FireSun 这意味着 UUID 将由 Django 调用 uuid.uuid4() 生成,而不是由您的数据库生成。如果你只是使用 Django 插入记录,这对你来说不是问题。 这样做的缺点(我发现)如果这是作为迁移完成的,那么 Db 中的所有现有行都将获得相同的 UUID 值。 为避免现有行获得相同的 UUID 值,请遵循 Django 文档中的“添加唯一字段的迁移”示例:link @BogeyMan 完全一样,我也面临同样的问题,到目前为止有什么解决方案吗?

以上是关于如何使用 django 自动创建 uuid 列的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 - 如何添加UUID列

如何在 Postgres 中为 UUID 主键列设置默认值?

如何在 uuid 中使用 IN 运算符 - Django?

Django如何使用带有UUID而不是PK的通用视图

如何使用 UUID

如何将 Django 的身份验证用户模型配置为具有 UUID(Postgres DB)