2
respostas

Gostaria de estender campos do Auth User do Django

Li vários tópicos sobre extensões dos campos do auth User e por enquanto não estou conseguindo aplicar nenhuma técnica que funcione em meu caso. Criei uma aplicação de cadastro de curriculos. Na interface inicial do web app mostra uma página para cadastro com várias informações (data_nasc, local, cidade, cep, etc). Esse é meu views, tentando criar o usuário e logo após criar o restante dos dados no banco de dados. A criação do usuário funciona. As informações de username, email e password aparecem na tabela do Postgres. As tabelas da classe profile também aparecem no bd, porém quando eu incluo os dados pelo template, elas simplesmente não aparecem lá.ModelsViewsQuando entro no Django admin, consigo registrar com todos os dados, inclusive fazendo uma referência a tabela de Auth User, porém quando tento incluir esses dados no template e fazer o POST, apenas os dados da tabela Auth User aparecem (username, email, senha). Os outros dados que inclui não aparecem

2 respostas

Fala Bruno, tudo certo?

Não sei se já conseguiu resolver a situação que mencionou. Mas, estou fazendo o curso e achei bastante interessante a proposta que trouxe.

Fiz uma implementação que funcionou aqui, vou compartilhar contigo, bem como algumas questões que notei nos prints. Segue abaixo:

1 - A classe 'Profile' que você criou, herda de models.Model. Dentro do Model (lá nos arquivos-base do Django), se você observar, não há um método create. Logo, você não conseguirá usá-lo. Pra instanciar Profile na variável perfil, basta chamar Profile(), passando direto os parâmetros para dentro da instância, sem a necessidade de invocar objects.create;

2 - A variável user, dentro de Profile, sempre vai precisar ser uma instância de User, para que crie os vínculos corretamente. Com isso, antes de instanciar Profile, criei uma variável id_usuario, onde uso User.objects.get para instanciar este usuário criado (Ficará mais evidente no print abaixo). Após, uso essa variável id_usuario para identificar o usuário dentro da instância de Profile.

Segue o print:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 - Outro ponto que notei, me parece que houve um pequeno descuido no momento de atribuir as variáveis ao instanciar o Profile. Por exemplo, a atribuição da Data de Nascimento está como datanascimento = data_nascimento. Esta variável (datanascimento) não existe no seu models do Profile. O correto, a meu ver, seria atribuir desta forma: data_nascimento = data_nascimento, onde a primeira refere-se à data_nascimento do models e a segunda refere-se à data_nascimento que você criou na linha 35. Te aconselharia a dar uma revisada neste detalhe também.

Enfim, espero que estas colocações te ajudem aí no desenvolvimento. Abraço!

Adicionalmente, alterei o admin.py incluindo uma classe para listar os dados do Profile, conforme abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O único detalhe é que ela ficará em uma tela separada do cadastro de usuários no Django, porém não vejo problemas, dado que o front-end "unifica" essas visões adequadamente. Talvez a única forma de tratar tudo na mesma tela no admin do Django seria manipular diretamente a classe User do Django.

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software