Django 键违反唯一约束

Django key violates unique constraint

我有一个奇怪的问题,生成相同的 PK 给我错误:

django.db.utils.IntegrityError: duplicate key value violates unique constraint "Comment_pkey"
DETAIL:  Key (id)=(uxlt72XrRu-fm260qHo9Zg) already exists.

这是我的模型:

class Comment(models.Model):

    id = models.CharField(primary_key=True, max_length=28, unique=True,
                          default="make_id()", editable=False)
    description = models.TextField(max_length=255)

生成ID的函数:

def make_id():
    return base64.b64encode(uuid.uuid4().bytes).decode("utf-8")

我是如何得到错误的:

c = Comment.objects.create(description="test") < ==== works

c2 = Comment.objects.create(description="test2") < === violates unique constraint

那么,为什么我的模型不是每次都生成新的 ID?同样的事情发生在测试中,而不仅仅是 shell.

默认参数的正确用法是:default=make_id。因此,场线将是:

id = models.CharField(primary_key=True, max_length=28, unique=True,
                      default=make_id, editable=False)