Python Django模型字段unique=True,default=function
我有一个这样的模型Python Django模型字段unique=True,default=function,python,django,django-models,unique,Python,Django,Django Models,Unique,我有一个这样的模型 def create_invite_code(): return str(uuid.uuid4())[0:8] class InviteCodes(models.Model): id = models.CharField(max_length = 36, primary_key = True, default=build_uuid) code = models.CharField(max_length=8, unique=True, default
def create_invite_code():
return str(uuid.uuid4())[0:8]
class InviteCodes(models.Model):
id = models.CharField(max_length = 36, primary_key = True, default=build_uuid)
code = models.CharField(max_length=8, unique=True, default=create_invite_code)
如果create_invite_code返回数据库中已经存在的代码,django会再次调用该函数直到找到一个不存在的代码吗?还是会出错?您的型号中的代码字段是唯一的。如果您试图用已经存在的代码创建另一个条目,那么python将引发
IntegrityError:UNIQUE constraint failed
异常
您可以通过从create\u invite\u code
函数返回一个常量字符串来测试它。比如说,
def create_invite_code():
return 'test'
第一个条目将是唯一的,但在第二个调用中会引发异常。正如人们在这里所说的,它将引发“unique constraint failed”完整性错误。这可能会发生,因为您没有进行任何唯一性检查 我推荐大卫·克莱默的《德扬戈·乌伊菲尔德》。它为您处理所有验证
Python将引发
整数错误:唯一约束失败
。在你的create\u invite\u code
函数中,返回常量字符串并自己测试。好的,我明白了,你为什么不将此作为答案发布,我会更正它。我不担心uuid字段id,因为这篇文章,我希望随机8个字母的代码是安全的。这是django uuidfield不会为我做的。