我正在使用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模块创建它们?
答案 0 :(得分:0)
当您在Django中使用UUIDField作为主键时,它不会为您生成UUID,您可以在保存对象之前自己生成UUID。你的代码就是这样,它运行正常。
UUIDField将存储在Postgres UUID字段中。