错误的代码
import uuid
from django.db import models class MyModel(models.Model): id = models.CharField(max_length=32, primary_key=True, editable=False, default=str(uuid.uuid4())) # 其他字段...
上述代码错误的地方在于,default=str(uuid.uuid4())这部分代码会在模块加载时执行一次,生成一个固定的uuid, 相当于default=“xxxxxxx32432”, 这会导致每次插入数据时是一个固定的字符串,而不是我们预期的每次插入数据时新生成一个uuid字符串作为id,数据库id字段的唯一性限制将导致插入数据失败
正确的代码
import uuid
from django.db import models class MyModel(models.Model): id = models.CharField(max_length=32, primary_key=True, editable=False, default=uuid.uuid4) # 其他字段...
不过,以上依赖于django高版本的支持,为了程序的可读性以及兼容性,以下是最佳的写法
import uuid
from django.db import models class MyModel(models.Model): id = models.CharField(max_length=32, primary_key=True, editable=False, default=lambda:str(uuid.uuid4())) # 其他字段...
这样传递给default参数的就明显的是一个匿名函数,每次插入数据都会新生成一个新的uuid字符串