2015-11-19 21 views
0

我有與max_length=16一個CharField稱爲verify_key一個模型:django模型可以擁有獨特且共享的非唯一字段嗎?

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

該字段的目的是成爲一個獨特的,16個字符的字母數字標識符。當用戶註冊時,他們會發送此代碼,他們返回此代碼並將其驗證狀態設置爲true。

如果兩個用戶以某種方式設法生成相同的密鑰,最近將無法註冊。當用戶註冊時我想要做的是將其verify_key設置爲空字符串。我不能用獨特的參數來做到這一點。我該如何解決這個問題,還是有更好的方法?

+0

https://github.com/mfogel/django-simple-email-confirmation – sobolevn

回答

0

您可以在該字段上設置null=True並將字段設置爲None。具有UNIQUE約束的列可以具有多個NULL值。

使用表單或默認值時必須明確。 CharField的默認值爲空字符串,空格式值也將保存爲空字符串。在這兩種情況下,您都需要明確將值設置爲None

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

如果您使用的是django 1.8,您也有UUIDField。這裏是Django doc

0

你不能在你的模型類中做到這一點。

您只需在該字段中添加null=True,並在創建實例時設置Model.verify_key=None。另外,您可以定義一個自定義模型表單來處理表單中的這個。

0

您不能設置空字符串,但可以將該值設置爲NULL。當Django檢查唯一性時,NULL不等於NULL。

相關問題