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

+0

Python会引发'IntegrityError:UNIQUE约束失败'。在你的'create_invite_code'函数中返回常量字符串并自己测试。 –

+0

确定gotcha为什么不张贴这个作为答案,我将它作为正确 –

您的模型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

+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 –