2015-02-09 112 views
0

不知道這是否是Django中的錯誤,或者它不支持我想要做的事情(或者我如何做)。模型中的Django Auto UUID不唯一

我的模型的一個片段:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, primary_key=True, related_name='profile' 
    login_hash = models.CharField(max_length=36, blank=True, null=True, default=uuid.uuid4()) 
    ... 

正如你看到的,我已經設置默認爲login_hash來調用uuid.uuid4()

正常工作......然而,多重的用戶配置電話(快速創建新用戶,即使看似幾分鐘,但我還沒有正式的時間)會爲多個用戶產生相同的login_hash

看來,django(我在1.7.4)正在緩存uuid4()一段時間的結果。對我所要做的事不太好。

SOLUTION: 我正在使用。我只是在數據庫上設置了「插入」觸發器,這樣當我插入一條新記錄時,數據庫將生成UUID,但僅在插入/新記錄中生成。

有沒有辦法在django中做到這一點,以便我可以保持它與數據庫不可知論?

回答

7

正常工作......然而,在用戶配置多個電話(創建新用戶快速,即使看起來幾分鐘,但我不是一個正式的時間)將導致多個用戶使用同login_hash。

由於目前編寫代碼,您在UserProfile處調用uuid.uuid4()。它將被調用一次,結果值將成爲所有新創建的默認值。

作爲默認設置,您所要做的是傳遞一個可調用。像這樣:default=uuid.uuid4

此外,對於CharField我強烈建議不允許NULL值以及空白值。目前還不清楚,如果你真的想讓這個領域的空白值,但讓我們假設你這樣做。你應該結束了這一點:

login_hash = models.CharField(max_length=36, blank=True, default=uuid.uuid4) 
+0

「巴掌額頭」......當然......恨一個夫婦的大括號搞砸了東西ups :)謝謝! – 2015-02-09 13:18:46