Mam projekt django z aplikacją django-allauth. Podczas rejestracji muszę zebrać dodatkowe dane od użytkownika. Natknąłem się tutaj na podobne pytanie, ale niestety nikt nie odpowiedział na część dotyczącą dostosowywania profilu.
Zgodnie z dostarczoną dokumentacjądjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Ciąg znaków wskazujący na niestandardową klasę formularza (np.
‘myapp.forms.SignupForm’
), Który jest używany podczas rejestracji, aby poprosić użytkownika o dodatkowe informacje (np. Zapis do newslettera, data urodzenia). Ta klasa powinna implementować‘save’
metodę, akceptując nowo zarejestrowanego użytkownika jako jedyny parametr.
Jestem nowy w django i walczę z tym. Czy ktoś może podać przykład takiej niestandardowej klasy formularza? Czy muszę dodać również klasę modelu z odsyłaczem do obiektu użytkownika w ten sposób ?
źródło
ACCOUNT_SIGNUP_FORM_CLASS
po pierwszym logowaniu w serwisach społecznościowych, aby zebrać i zapisać pola niestandardowego modelu użytkownika? Również użycie niestandardowego modelu użytkownika przezAUTH_USER_MODEL
zmiany z git: github.com/pennersr/django-allauth nie są przesyłane w pypi.Korzystając z rozwiązania zaproponowanego przez pennersra, otrzymałem Ostrzeżenie o wycofaniu:
Dzieje się tak, ponieważ od wersji 0.15 metoda zapisu została wycofana na korzyść metody rejestracji def (żądanie, użytkownik).
Aby rozwiązać ten problem, kod przykładu powinien wyglądać następująco:
źródło
signup
zamiastsave
.Oto, co zadziałało w moim przypadku, łącząc kilka innych odpowiedzi (żadna z nich nie jest w 100% kompletna i SUCHA).
W
yourapp/forms.py
:A w
settings.py
:W ten sposób używa form wzorcowych, aby były SUCHE i używa nowych
def signup
. Próbowałem umieścić,'myproject.myapp.forms.SignupForm'
ale to jakoś spowodowało błąd.źródło
@Shreyas: Poniższe rozwiązanie może nie jest najczystsze, ale działa. Daj mi znać, jeśli masz jakieś sugestie dotyczące dalszego uporządkowania.
Aby dodać informacje, które nie należą do domyślnego profilu użytkownika, najpierw utwórz model w yourapp / models.py. Przeczytaj ogólną dokumentację django, aby dowiedzieć się więcej na ten temat, ale zasadniczo:
Następnie utwórz formularz w yourapp / forms.py:
źródło
W swoim
users/forms.py
umieszczasz:W settings.py umieściłeś:
W ten sposób nie łamiesz zasady DRY przez wielokrotność Definicja pól modeli użytkownika.
źródło
Wypróbowałem wiele różnych tutoriali i wszystkim brakuje czegoś, powtarzając niepotrzebny kod lub robiąc dziwne rzeczy, poniżej podążam za moim rozwiązaniem, które łączy wszystkie opcje, które znalazłem, działa, już je wdrożyłem, ALE to nadal mnie nie przekonuje, ponieważ spodziewałbym się otrzymywać imię i nazwisko w funkcjach, które dołączyłem do użytkowników, aby uniknąć tworzenia profilu w formularzu, ale nie mogłem, na razie myślę, że to ci pomoże.
Models.py
Forms.py
Settings.py
źródło
create_user_profile
sygnał nie działa zgodnie z projektem. Po drugie, możesz zredukować to do jednego sygnału, na podstawiecreated
, zwłaszcza gdy mówisz DRY. Po trzecie, zapisujesz profil, wywołując user.save () w swoim widoku, a następnie zapisując profil ponownie z rzeczywistymi danymi.fields = [...]
z nawiasami kwadratowymi zamiastfields = (...)
nawiasów?exclude
.To jest to. (:
źródło
Utwórz model profilu z użytkownikiem jako OneToOneField
źródło