2014-09-14 4 views
5

django 모델에서 이상한 동작을 발견했습니다. 예를 들어 우리는 간단한 장고 모델을 가지고 :Django 모델의 기본값으로 UUID가

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

장고 같은 activation_key

2 사용자를 만드는 :

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()) 

나는 새 사용자를 작성하고, 그 후 같은 또 다른 하나

그런데 나는 그것을 좋아한다 :

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() 

모든 것이 잘 작동한다. d 장고는 다른 활성화 키로 2 명의 사용자를 생성합니다.

여기 무슨 일 이니? 파이썬은 모델 객체를로드하고 wsgi 응용 프로그램이 시작될 때 모델의 기본값을 계산합니까? uuid가 첫 번째 경우에는 동일한 값을 갖지만 두 번째 경우에는 다른 값을 제공하는 이유는 무엇입니까?

감사합니다.

+1

, 그것은 호출 할 필요가있다. 다음은 관련 문서입니다 https://docs.djangoproject.com/en/dev/ref/models/fields/#default – karthikr

답변

16

문제는이 모델 클래스가 초기화 될 때 uuid.uuid1() 호출에 의해 반환 된 호출하지만 값하지 기본값을 설정하고 여기에

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

대로 설정하는 default 속성입니다.

호출 가능으로 설정하는 default=uuid.uuid1으로 설정해야하며 새 기본값을 사용해야 할 때마다 새로운 uuid를 설정합니다.