2012-07-25 12 views
5

Szukałem najlepszej praktyki, ale jej nie znalazłem. Nie mogłem nawet znaleźć rozwiązania, którego potrzebuję, by ktokolwiek inny.Automatyczne tworzenie nazwy użytkownika w Modelu użytkownika w Django na podstawie innych pól

muszę generowania login użytkownika w oparciu o jego innych danych (imię & nazwisko), ewentualnie dołączenie całkowitą na końcu, dopóki nie dostanę unikalną nazwę użytkownika.

Zdecydowanie wolę robić to w modelu. Czy istnieje jakiś standardowy sposób, aby to zrobić? Czy jest to właściwe tylko w formularzach? Badałem przeciążanie różnych metod modelowania, a także sygnałów i nie znalazłem odpowiedniego miejsca, w którym mogłem je dodać.

Odpowiedz

4

Jednym z możliwych rozwiązań może być sygnał pre_save.

+0

Zastanawiałem się nad wykorzystaniem tego, ale jestem zainteresowany tym, jakie formy będą z tym faktycznie robić. Formularze sprawdzają dane wejściowe przed wywołaniem funkcji 'save()', więc pole będzie traktowane jako nieprawidłowe. Btw. 'obj.save()' również wywoła sygnał 'pre_save', więc prawdopodobnie powinieneś go usunąć (lub zastąpić czymś, co miałeś na myśli). – Tadeck

+0

Twoje rozwiązanie działa, ale nie zawsze (jeśli sprawdzanie poprawności jest obsługiwane przed zapisaniem, mamy pecha) i wymaga korekt (usunięcie 'obj.save()' i 'get_unique_username' powinno również działać, jeśli aktualizujemy istniejący model) . Ogólnie myślę, że nie ma lepszego sposobu, aby to zrobić, więc twoja odpowiedź jest do przyjęcia. Dzięki. – Tadeck

+0

@Tadeck zobacz odpowiedź, teraz zajmuje się wskazanym problemem. – Ahsan

Powiązane problemy