python - 如何使用 Django 将 postgres 表默认 ID 设置为 uuid_generate_v4()

标签 python django postgresql

我被告知将我的 Django 项目中的所有表默认 ID 设置为 postgresql 方法 uuid_generate_v4() 的值。

我正在使用的当前模型的一个示例是:

import uuid

from django.db import models

class MyModel(models.Model):
    class Meta:
        ordering = ("my_var",)

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, blank=True, editable=False)
    my_var = models.CharField(max_length=64, unique=True)

我已经明白,不建议将 SQLAlchemy 与 Django 混合使用,那么我怎样才能最好地实现要求我做的事情呢?

(注意:是的,default=uuid.uuid4 不足以满足我的项目要求)

最佳答案

您可以使用Django 的Func 来调用内置的数据库函数。其实对于PostgreSQL,Django是支持RandomUUID的定义如下:

class RandomUUID(Func):
    template = 'GEN_RANDOM_UUID()'
    output_field = UUIDField()

可以这样调用:

from django.contrib.postgres.functions import RandomUUID

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, default=RandomUUID)

因此,如果 postgreSQL gen_random_uuid() 不是您所需要的(显然它与 uuid_generate_v4() 不同,如 here 所述),只需创建您自己的 Func 类用 template = 'UUID_GENERATE_V4()'

替换模板

关于python - 如何使用 Django 将 postgres 表默认 ID 设置为 uuid_generate_v4(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57361570/

相关文章:

python - 遍历字符串的一部分

python - Pandas groupby() 在一列上,然后在另一列上求和

python - 如何使用 django paginator 在页面上拆分 DataFrame (pandas)?

django - 在汇总中使用模型方法

SQL 查询从多个表中获取不同的行

mysql - Postgres 导入文件的列由换行符分隔

python - 如何让用户在生成文件时下载文件

python - Django 的语言环境文件安装在奇怪的地方

javascript - 如何使用脚本标签下的url标签

postgresql - 将字符变化字段转换为日期