目前Django UUIDField如何在Postgresql中生成UUID的首要答案是什么?表示
当您在Django中使用
UUIDField
作为主键时,它不会为您生成UUID,而是在保存对象之前自己生成
但我认为应该有可能破解一个允许基于DB的UUID生成的解决方案。
一旦您在postgres 中安装了uuid-ossp
扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
我认为它应该或多或少像AutoField
一样工作。
如果原始sql已用于表创建
CREATE TABLE example(
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
);
然后原始插入将返回一个新的随机UUID作为id字段。
如何创建一个自定义的Field
,使这个原始解决方案与Django ORM一起工作?
我刚刚找到了一年前问的这个问题的解决方案。Django为您提供了RandomUUID
,它在PostgreSQL中调用gen_random_uuid
。
示例用法:
from django.contrib.postgres.functions import RandomUUID
class MyModel(models.Model):
id = models.UUIDField(primary_key=True, default=RandomUUID)
其中RandomUUID
为
class RandomUUID(Func):
template = 'GEN_RANDOM_UUID()'
output_field = UUIDField()
对于低于13版本的PostgreSQL文档,提到调用gen_random_uuid
返回版本4(随机(UUID。(过时了,这个功能现在也包含在核心PostgreSQL中。(
它已经过时,因为"在pgcrypto中过时";扩大
在PostgreSQL 13及以上版本的文档中,您可以在第9章中找到这个函数。函数和运算符部分
此函数返回版本4(随机(UUID。这是最常用的UUID类型,适用于大多数应用程序。