Django的模型领域唯一= True和默认=功能
问题描述:
所以我有一个模型,看起来像这样Django的模型领域唯一= True和默认=功能
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。它为你处理所有的验证。
+0
我不担心uuid字段id,因为这篇文章,我想随机8字母代码是安全的。哪个django-uuidfield不会为我做。 http://*.com/questions/703035/when-are-you-truly-forced-to-use-uuid-as-part-of-the-design/786541#786541 –
Python会引发'IntegrityError:UNIQUE约束失败'。在你的'create_invite_code'函数中返回常量字符串并自己测试。 –
确定gotcha为什么不张贴这个作为答案,我将它作为正确 –