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!