我的模型CharField
max_length=16
名为verify_key
:
verify_key = models.CharField(unique=True, max_length=16)
此字段的目的是成为唯一的16个字符的字母数字标识符。当用户注册时,会向他们发送此代码,他们会返回此代码并将其验证状态设置为true。
如果两个用户以某种方式设法生成相同的密钥,则最新的将无法注册。当用户注册时我想要做的是将verify_key
设置为空字符串。我不能用unique参数做到这一点。我该如何解决这个问题还是有更好的方法?
答案 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。