Я заметил странное поведение значения по умолчанию в модели django. Например, у нас есть простой Джанго модель:UUID как значение по умолчанию в модели Django
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.save()
user_b = SiteUser(username="UserB")
user_b.save()
Джанго составляет 2 пользователей с тем же activation_key
Но тогда я делаю это так:
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 Django создает 2 пользователя с разными ключами активации.
Что здесь происходит? Python загружает объект модели и вычисляет значение по умолчанию модели при запуске приложения wsgi или что? Почему uuid дает одни и те же значения в первом случае, но отличается во втором?
Спасибо.
Как отмечает @Rohan, он должен быть вызываемым. Вот соответствующая документация https://docs.djangoproject.com/en/dev/ref/models/fields/#default – karthikr