本文主要是介绍django使用uuid的坑,据说有外国公司已经为此损失了超1w刀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
错误的代码
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字符串
这篇关于django使用uuid的坑,据说有外国公司已经为此损失了超1w刀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!