Eu tenho um projeto django com o aplicativo django-allauth. Preciso coletar dados adicionais do usuário no momento da inscrição. Eu me deparei com uma pergunta semelhante aqui, mas, infelizmente, ninguém respondeu à parte de personalização do perfil.
De acordo com a documentação fornecida paradjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Uma string apontando para uma classe de formulário personalizado (por exemplo
‘myapp.forms.SignupForm’
) que é usada durante a inscrição para solicitar ao usuário uma entrada adicional (por exemplo, inscrição no boletim informativo, data de nascimento). Essa classe deve implementar um‘save’
método, aceitando o usuário recém-inscrito como seu único parâmetro.
Eu sou novo no django e estou lutando com isso. Alguém pode fornecer um exemplo de uma classe de formulário personalizado? Eu preciso adicionar uma classe de modelo também com um link para o objeto de usuário como este ?
fonte
ACCOUNT_SIGNUP_FORM_CLASS
após o primeiro login social para coletar e salvar os campos do modelo de usuário personalizado? Além disso, o uso do modelo de usuário personalizado porAUTH_USER_MODEL
alterações de git: github.com/pennersr/django-allauth não são carregados em pypi.Usando a solução sugerida por pennersr, recebi um aviso de suspensão de uso:
Isso ocorre porque a partir da versão 0.15, o método save foi substituído por um método def signup (solicitação, usuário).
Então, para resolver isso, o código do exemplo deve ser assim:
fonte
signup
vez desave
.Aqui está o que funcionou para mim combinando algumas das outras respostas (nenhuma delas está 100% completa e SECA).
Em
yourapp/forms.py
:E em
settings.py
:Desta forma ele usa os formulários do modelo para que fique SECO, e usa o novo
def signup
. Tentei colocar,'myproject.myapp.forms.SignupForm'
mas de alguma forma resultou em um erro.fonte
@Shreyas: A solução abaixo pode não ser a mais limpa, mas funciona. Por favor, deixe-me saber se você tem alguma sugestão para limpá-lo ainda mais.
Para adicionar informações que não pertencem ao perfil de usuário padrão, primeiro crie um modelo em yourapp / models.py. Leia a documentação geral do django para aprender mais sobre isso, mas basicamente:
Em seguida, crie um formulário em yourapp / forms.py:
fonte
Em seu
users/forms.py
você coloca:Em settings.py você coloca:
Desta forma, você não quebra o princípio DRY por multiplicidade Definição dos campos dos modelos de usuário.
fonte
Já tentei vários tutoriais diferentes e em todos falta algo, repetindo código desnecessário ou fazendo coisas esquisitas, segue abaixo minha solução que junta todas as opções que encontrei, está funcionando, já coloquei em produção MAS está ainda não me convenceu, pois esperava receber first_name e last_name dentro das funções que anexei a Users create para evitar a criação de um perfil dentro do formulário mas não consegui, pelo menos acho que vai te ajudar.
Models.py
Forms.py
Settings.py
fonte
create_user_profile
sinal falha por design. Em segundo lugar, você pode reduzir isso para um sinal, com base emcreated
, especialmente quando se fala em DRY. E, terceiro, você efetua um salvamento de Perfil chamando user.save () em sua visualização e salvando o perfil novamente com os dados reais.fields = [...]
com colchetes em vez defields = (...)
parênteses?exclude
.É isso. (:
fonte
Crie um modelo de perfil com o usuário OneToOneField
fonte