2012-07-25 13 views
5

Ho cercato le migliori pratiche, ma non l'ho trovato. Non ero nemmeno in grado di trovare una soluzione che ho bisogno di usare da qualcun altro.Crea automaticamente il nome utente nel modello Utente in Django basato su altri campi

ho bisogno di generare nome utente dell'utente sulla base di altri suoi dati (nome & cognome), opzionalmente aggiungendo intero alla fine, fino a ottenere il nome utente univoco.

Preferisco fortemente farlo nel modello. C'è un modo standard per farlo? O è appropriato solo nelle forme? Ho svolto ricerche sull'overloading di vari metodi del modello User e di segnali e non ho trovato alcun luogo adatto in cui potrei aggiungerlo.

risposta

4

Una possibile soluzione potrebbe essere il segnale pre_save.

def my_callback(sender, **kwargs): 
    obj = kwargs['instance'] 
    if not obj.id: 
     username = get_unique_username(obj) # method that combines first name and last name then query on User model, if record found, will append integer 1 and then query again, until found unique username 
     obj.username = username 
pre_save.connect(my_callback, sender=User) 
+0

Stavo pensando di usarlo, ma mi preoccupo di quali forme faranno effettivamente con quello. I form confermano l'input prima di effettuare una chiamata a 'save()', quindi il campo verrebbe considerato non valido. Btw. 'obj.save()' chiamerà anche il segnale 'pre_save', quindi dovrei probabilmente rimuoverlo (o rimpiazzarlo con qualcos'altro che avevi in ​​mente). – Tadeck

+0

La tua soluzione funziona, ma non sempre (se la convalida viene gestita prima del salvataggio, non siamo fortunati) e ha bisogno di aggiustamenti (la rimozione di 'obj.save()' e 'get_unique_username' dovrebbe funzionare anche se stiamo aggiornando il modello esistente) . In generale, penso che non ci sia un modo migliore per farlo, quindi la tua risposta è accettabile. Grazie. – Tadeck

+0

@Tadeck vedere la risposta, ora gestisce il problema segnalato. – Ahsan

Problemi correlati