2014-09-14 26 views
5

Django modelinde varsayılan değerin garip davranışını fark ettim. Örneğin basit bir django modeli vardır:UUID, Django modelinde varsayılan değer olarak

user_a = SiteUser(username="UserA") 
user_a.save() 
user_b = SiteUser(username="UserB") 
user_b.save() 

Django aynı activation_key

ile 2 kullanıcıları yapar:

import uuid 
... 

class SiteUser(models.Model): 
    ... 
    username = models.CharField(max_length=255, verbose_name=u"Username") 
    activation_key = models.CharField(max_length=64, verbose_name=u"Activation key", default=uuid.uuid1()) 

Ben yeni bir kullanıcı oluşturmak ve bundan sonra böyle başka bir

Ama sonra böyle yaparım:

user_a = SiteUser(username="UserA") 
user_a.activation_key = uuid.uuid1() 
user_a.save() 
user_b = SiteUser(username="UserB") 
user_b.activation_key = uuid.uuid1() 
user_b.save() 

Her şey iyi çalışıyor d Django, farklı aktivasyon tuşları ile 2 kullanıcı oluşturur.

Neler oluyor burda? Python model nesnesini yükler ve wsgi uygulaması başlatıldığında ya da bu modelin varsayılan değerini hesaplar mı? Neden uuid ilk durumda aynı değerleri veriyor ama ikinci olarak farklı mı?

Teşekkürler.

+1

, bir çağrılabilir olması gerekiyor. İşte ilgili belgeler https://docs.djangoproject.com/en/dev/ref/models/fields/#default – karthikr

cevap

16

Sorun bu model sınıf başlatıldı durumdayken uuid.uuid1() çağrı tarafından döndürülen bir çağrılabilir ama değer olarak değil varsayılan değer ayarlarken İşte

activation_key = models.CharField(max_length=64, verbose_name=u"Activation key", 
       default=uuid.uuid1()) 

gibi ayarlıyorsunuz default niteliktir.

Bu değeri default=uuid.uuid1 olarak ayarlanmalı ve bu, onu, varsayılan olarak varsayılan değerlerin kullanılması gerektiğinde yeni uuid olarak ayarlar.

İlgili konular