UUID als Standardwert im Django-Modell

Ich habe das seltsame Verhalten des Standardwerts im Django-Modell bemerkt. Zum Beispiel haben wir ein einfaches Django-Modell:

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

Wenn ich einen neuen Benutzer erstelle, und danach noch so einen:

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

Django macht 2 Benutzer mit dem gleichenactivation_key

Aber dann mache ich das so:

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

Alles funktioniert einwandfrei und Django erstellt 2 Benutzer mit unterschiedlichen Aktivierungsschlüsseln.

Was ist hier los? Python lädt das Modellobjekt und berechnet den Standardwert des Modells, wenn die wsgi-App gestartet wird, oder? Warum gibt uuid im ersten Fall dieselben Werte, im zweiten Fall jedoch unterschiedliche?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage