5

Ich habe nach Best Practice gesucht, aber ich habe es nicht gefunden. Ich konnte sogar keine Lösung finden, die ich sonst noch brauche.Automatisch Benutzernamen in Benutzermodell in Django basierend auf anderen Feldern erstellen

ich muß Benutzername des Benutzers erzeugen, basierend auf seinen anderen Daten (erster & Nachnamen nennen), gegebenenfalls ganze Zahl am Ende angehängt, bis ich die eindeutigen Benutzername erhalten.

Ich bevorzuge das im Modell. Gibt es einen Standardweg dafür? Oder ist es nur in Formularen sinnvoll? Ich habe das Überladen verschiedener Modellmethoden sowie Signale untersucht und fand keinen geeigneten Platz, den ich hinzufügen könnte.

Antwort

4

Eine mögliche Lösung könnte durch pre_save Signal sein.

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

Ich habe darüber nachgedacht, das zu verwenden, aber ich mache mir Sorgen darüber, welche Formen das tatsächlich tun werden. Formulare validieren die Eingabe vor dem Aufruf von 'save()', damit das Feld als ungültig behandelt wird. Übrigens. 'obj.save()' wird auch 'pre_save' Signal nennen, also sollte ich das wahrscheinlich entfernen (oder durch etwas anderes ersetzen, das du im Sinn hast). – Tadeck

+0

Ihre Lösung funktioniert, aber nicht immer (wenn die Validierung vor dem Speichern durchgeführt wird, haben wir Pech) und müssen angepasst werden (das Entfernen von 'obj.save()' und 'get_unique_username' sollte auch funktionieren, wenn wir das existierende Modell aktualisieren) . Im Allgemeinen denke ich, dass es keinen besseren Weg gibt, dies zu tun, also ist Ihre Antwort akzeptabel. Vielen Dank. – Tadeck

+0

@Tadeck sehen Sie die Antwort, jetzt behandelt es Ihr spitzes Problem. – Ahsan

Verwandte Themen