【问题标题】:Django and uuid generated by database数据库生成的Django和uuid
【发布时间】:2016-10-14 11:15:05
【问题描述】:

我正在使用 Django 和 DRF 创建一个 rest api。 我不想将 ID 直接暴露给客户端,所以我尝试像这个例子一样设置我的模型:

class AbstractGuidModel(models.Model):
    uuid = models.UUIDField(blank=True, default=uuid.uuid4, unique=True, editable=False)

    class Meta:
        abstract = True

class MyModel(AbstractGuidModel):
    name = models.CharField(max_length=NAME_LENGTH)

由于 AbstractGuidModel 具有 default=uuid.uuid4,uuid 由 python 代码生成,迁移如下所示:

CREATE TABLE "MyModel" ( ... "uuid" uuid NOT NULL UNIQUE, ... );

我读过 Postgres 有一个用于自动生成 uuid 的扩展。

一旦安装了扩展,我如何告诉 django 让数据库使用他自己的扩展,而不是让他使用 Python uuid 模块创建它们?

【问题讨论】:

    标签: django postgresql uuid


    【解决方案1】:

    当你在 Django 中使用 UUIDField 作为主键时,它不会为你生成一个 UUID,你在保存对象之前自己生成它。您的代码可以做到这一点并且运行良好。

    UUIDField 将根据 Postgres UUID 字段存储。

    【讨论】:

    • 我不想使用 uuid 作为主键,我的模型仍然使用默认的数字自动增量 ID。我正在使用 uuid 通过 api 公开记录,而不会让 api 消费者了解有关记录的特殊信息(创建顺序等)。我只想让 Postgres 自己生成 uuid,而不是使用 Python uuid 模块
    • 是的,你的代码会这样做(除了 Postgres 生成 uuid 部分)。您的“MyModel”对象将具有 id、name 和 uuid。 Uuid 将在保存到数据库之前由默认函数设置。在这种情况下,Postgres 将填充的唯一值是 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2023-02-07
    • 2011-01-03
    • 2016-10-23
    • 2017-06-25
    • 2013-11-16
    相关资源
    最近更新 更多