唯一字段上的可调用默认值在迁移时不会生成唯一值

问题描述 投票:0回答:1

使用 Django/DRF 创建 CRUD api

我正在尝试使用 RandomUUID 从 Postgres 创建 UUID:

from django.db import models
from django.contrib.postgres.functions import RandomUUID

class Year(models.Model):
    year_id = models.UUIDField(
        primary_key=True, default=RandomUUID, editable=False)

当我运行 python manage.py makemigrations 时

它给了我这个错误:

Callable default on unique field year.year_id will not generate unique values upon migrating

我做错了什么?

我希望 Django ORM 告诉 Postgres 创建 UUID。我不想使用Python的uuid模块。

python django postgresql django-models
1个回答
0
投票
  1. 如果您使用 PostgreSQL < 13,请确保正确安装了 pgcrypto 扩展。根据文档

在 PostgreSQL 上 < 13, the pgcrypto extension must be installed. You can use the CryptoExtension migration operation to install it.

  1. 您也可以使用Python 的uuid4。在您的 models.py 中,导入 uuid4
from uuid import uuid4

然后在你的模型中:

year_id = models.UUIDField(
        primary_key=True, default=uuid4(), editable=False
© www.soinside.com 2019 - 2024. All rights reserved.