1
resposta

Adicionar mais campos aos usuários

Como faço para cadastrar mais informações ao usuario do auth ? quero adicionar por exemplo, titulo eleitoral ou cpf como login no sistema e foto no cadastro de usuario utilizando o auth e com essa base de usuarios verificar se pertence a grupo de atendentes ou não...

no que fiz até o momento, no cadastro de um chamado tenho o id de um usuario (fiz por fora sem auth), como faço pra exibir a foto do usuário que ta em outra tabela quando for exibir o chamado que tem apenas o id_usuario ?

1 resposta

Olá Arnóbio, como você está?

Peço desculpas pela demora em obter um retorno.

Para adicionar mais campos ao modelo de usuário padrão do Django, você pode criar um novo modelo que contenha as informações adicionais que deseja armazenar, como CPF, endereço, etc. e, em seguida, criar uma relação de chave estrangeira com o modelo de usuário do Django, que por padrão ocorre através da cláusula AUTH_USER_MODEL que permite adicionar funcionalidades extras ao modelo de usuário (django.contrib.auth.models.User), como mostro abaixo:

class UsuariosComCamposAdicionais(models.Model):
    cpf = models.CharField(max_length=11)
    endereco = models.CharField(max_length=255)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

Resultado no terminal

In [4]: from receitas.models import UsuariosComCamposAdicionais

In [5]: from django.contrib.auth.models import User

In [6]: user = User.objects.create(username='maria', email='maria@example.com', password='password')

In [7]: user_profile = UsuariosComCamposAdicionais.objects.create(cpf='12345678901', endereco='Rua Teste, 123', user=user)

In [8]: print(user_profile.cpf)
12345678901

In [9]: print(user_profile.endereco)
Rua Teste, 123

In [10]: print(user_profile.user.username)
maria

No exemplo acima, através da chave estrangeira criada, conseguimos adicionar mais campos ao modelo de usuário através da classe intermediária UsuariosComCamposAdicionais .

Todavia, vale ressaltar que outra forma de customizar o modelo é estender algumas classes bases do Django, como a AbstractBaseUser ou AbstractUser, e definir os campos personalizados desejados. A título de curiosidade, caso queira entender mais sobre usuários customizados (CustomizeUser) e criação de tabelas próprias de autenticação, recomendo a leitura dos artigos abaixo:

Quanto a exibir a foto do usuário em uma view que está exibindo os detalhes de um chamado e que só tem o id do usuário, você pode usar a função get_object_or_404() para obter o objeto de usuário correto com base no ID fornecido e, em seguida, acessar o campo de foto do objeto de usuário retornado:

from django.contrib.auth import get_user_model
User = get_user_model()
usuario = User.objects.get(id=id_usuario)

A partir do objeto do usuário, você pode acessar o atributo que contém a imagem do perfil, que depende de como você está armazenando essa imagem. Se estiver usando o modelo de usuário padrão do Django, você pode usar o atributo profile_picture:

imagem_url = usuario.profile_picture.url

Em sua view, você pode enviar a imagem_url para o seu template, onde poderá exibir a imagem usando a tag <img> do HTML.

Espero ter ajudado. Continue mergulhando em conhecimento!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!