Ho notato lo strano comportamento del valore predefinito nel modello django. Per esempio abbiamo un semplice modello django:UUID come valore predefinito nel modello 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())
Quando creo un nuovo utente, e dopo che un altro genere:
user_a = SiteUser(username="UserA")
user_a.save()
user_b = SiteUser(username="UserB")
user_b.save()
Django fa 2 utenti con lo stesso activation_key
Ma poi lo faccio così:
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()
Tutto funziona bene e d Django crea 2 utenti con diverse chiavi di attivazione.
Cosa sta succedendo qui? Python carica l'oggetto modello e calcola il valore predefinito del modello all'avvio dell'app wsgi o in quello? Perché uuid dà gli stessi valori nel primo caso ma in secondo in secondo?
Grazie.
Come cita @Rohan, ha bisogno di essere un callable. Ecco la documentazione pertinente https://docs.djangoproject.com/en/dev/ref/models/fields/#default – karthikr