Django和uuid由数据库生成

时间:2016-10-14 11:15:05

标签: django postgresql uuid

我正在使用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有一个自动生成uuids的扩展名。

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

1 个答案:

答案 0 :(得分:0)

当您在Django中使用UUIDField作为主键时,它不会为您生成UUID,您可以在保存对象之前自己生成UUID。你的代码就是这样,它运行正常。

UUIDField将存储在Postgres UUID字段中。