django模型可以具有唯一且共享的非唯一字段吗?

时间:2015-11-19 14:41:42

标签: django

我的模型CharField max_length=16名为verify_key

verify_key = models.CharField(unique=True, max_length=16) 

此字段的目的是成为唯一的16个字符的字母数字标识符。当用户注册时,会向他们发送此代码,他们会返回此代码并将其验证状态设置为true。

如果两个用户以某种方式设法生成相同的密钥,则最新的将无法注册。当用户注册时我想要做的是将verify_key设置为空字符串。我不能用unique参数做到这一点。我该如何解决这个问题还是有更好的方法?

4 个答案:

答案 0 :(得分:1)

import uuid   
verify_key = models.CharField(max_length=50,
                              unique=True,
                              default=uuid.uuid4)

如果您使用的是django 1.8,则还有UUIDField。这是Django doc

答案 1 :(得分:0)

您可以在字段上设置null=True并将字段设置为None。具有UNIQUE约束的列可以包含多个NULL值。

使用表单或默认值时,您必须明确。 CharField的默认值为空字符串,空表单值也将保存为空字符串。在这两种情况下,您都需要将值显式设置为None

答案 2 :(得分:0)

您无法在模型类中执行此操作。

您只需要在字段中添加null=True,并在创建实例时设置Model.verify_key=None。此外,您可以定义自定义模型表单以在表单中处理此问题。

答案 3 :(得分:0)

您无法设置空字符串,但可以将值设置为NULL。当Django检查唯一性时,NULL不等于NULL。