2013-07-16 77 views
3

所以我能夠使用UUID 到目前爲止隨機生成一個ID,這樣好 但是當我嘗試數據庫中,我得到相同的值型號場Django的隨機值

def f(): 
    d = uuid4() 
    str = d.hex 
    return str[0:16] 

class Q(models.Model): 
    a = models.CharField(max_length=150) 
    b = models.IntegerField(max_length=25) 
    c = models.IntegerField(max_length=32 , default=0) 
    d = models.ManyToManyField(Ans , related_name='aa') 
    e = models.CharField(max_length=18 , default = f() ,unique=True) 


class Ans(models.Model): 
    sub = models.CharField(max_length=150) 


----------------------------------------------------------------- 

而且我像這樣插入

def ins(request): 
    t =random.randint(0, 1000) 
    p = Q(a = t , b=0 , c=0) 
    p.save() 
    return HttpResponse('Saved') 

只是好奇在這裏發生了什麼

附註:如果我設置e.unique = False我得到2-3用相同的E值之前,我得到一個新的 UUID值

+0

請注意:您應該避免命名模型/類「Q」,因爲Django具有[用於高級查詢的Q對象](https://docs.djangoproject.com/en/dev/topics/db /查詢/#複雜的查找與 - q-對象)。沒有真正的問題,但它可能會令人困惑。 – sphere

回答

10

你不應該叫您傳遞給default功能:

e = models.CharField(max_length=18, default=f, unique=True) 

僅供參考,根據docs,你應該通過一個值或調用的:

該字段的默認值。這可以是一個值或一個可調用的對象。如果可調用,則每次創建新對象 時都會調用它。

+0

耶穌基督。謝謝。下次我會更加關注文檔 – Xtal