Zauważyłem dziwne zachowanie domyślnej wartości w modelu django. Na przykład mamy prostego modelu django:UUID jako wartość domyślna w modelu 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())
Podczas tworzenia nowego użytkownika, a potem jeszcze jeden tak:
user_a = SiteUser(username="UserA")
user_a.save()
user_b = SiteUser(username="UserB")
user_b.save()
Django sprawia 2 użytkowników z tego samego activation_key
Ale potem robię to tak:
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()
Wszystko działa dobrze d Django tworzy 2 użytkowników z różnymi kluczami aktywacyjnymi.
Co tu się dzieje? Python wczytuje obiekt modelu i oblicza domyślną wartość modelu, gdy uruchamia się aplikacja wsgi? Dlaczego uuid podaje te same wartości w pierwszym przypadku, ale inne w drugim?
Dzięki.
Jak wspomina @Rohan, musi być wymagalne. Oto odpowiednia dokumentacja https://docs.djangoproject.com/en/dev/ref/models/fields/#default – karthikr