Skip to main content
 首页 » 编程设计

python之Django 键违反唯一约束

2025年05月04日90exmyth

我有一个奇怪的问题,生成相同的 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)