繁体   English   中英

Django模型字段unique = True和default = function

[英]Django model fields unique=True and default=function

所以我有一个看起来像这样的模型

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会再次调用该函数,直到找到不存在的代码? 还是会出错?

模型InviteCodes的代码字段是唯一字段。 如果您尝试使用现有代码创建另一个条目,则python将引发IntegrityError: UNIQUE constraint failed异常。

您可以通过从create_invite_code函数返回一个常量字符串来对其进行测试。 例如,

def create_invite_code():
  return 'test'

第一个条目将是唯一的,但是在第二个调用中将引发异常。

就像人们在这里所说的那样,它将引发“唯一约束失败”完整性错误。 由于您没有对唯一性进行任何检查,因此有可能发生这种情况。

我会推荐David Cramer的django-uuidfield。 它为您处理所有验证。

https://github.com/dcramer/django-uuidfield

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM