1
resposta

Como faço para criar um campo Telefone?

Estou criando um formulário para um sofware, e segui os passos do vídeo.

A única diferença é que o meu formulário tem um campo de Telefone, que declarei no forms.py como CharField. Porém, na hora de criar o usuário de fato, em views.py, como faço para criar o campo Telefone? Pois aparentemente não há um campo "telephone" no BD padrão do Django, como há os campos "username", "email", e "password".

Minha função está assim:

def cadastro(request):
    form = CadastroForms()

    if request.method == 'POST':
        form = CadastroForms(request.POST)

        #ação que irá tomar caso o formulário seja válido (armazenar os valores recebidos em um BD)
        if form.is_valid():
            nome=form['nome'].value()
            sobrenome=form['sobrenome'].value()
            telefone=form['telefone'].value()
            email_cadastro=form['email_cadastro'].value()
            senha_cadastro=form['senha_cadastro'].value()
            
            usuario = User.objects.create_user(
                username=nome,
                last_name=sobrenome,
                email=email_cadastro,
                password=senha_cadastro,
            )
1 resposta

Opa, Mariana! Joia?

Realmente, o modelo User padrão do Django não possui um campo de telefone. Para resolver isso, você pode estender o modelo User do Django criando um perfil de usuário personalizado.

Aqui está um exemplo de como você pode fazer isso:

  1. Crie um modelo de perfil de usuário:

    Primeiro, você precisa criar um modelo de perfil de usuário que tenha um campo de telefone. No seu arquivo models.py, adicione o seguinte código:

    from django.contrib.auth.models import User
    from django.db import models
    
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        telefone = models.CharField(max_length=15)
    
        def __str__(self):
            return self.user.username
    
  2. Crie um sinal para salvar o perfil automaticamente:

    Para garantir que um perfil seja criado sempre que um novo usuário for registrado, você pode usar sinais do Django. No mesmo arquivo models.py ou em um arquivo signals.py, adicione:

    from django.db.models.signals import post_save
    from django.dispatch import receiver
    
    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)
    
    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()
    
  3. Atualize seu formulário de cadastro:

    No seu arquivo forms.py, adicione o campo de telefone ao formulário de cadastro:

    from django import forms
    from django.contrib.auth.models import User
    
    class CadastroForms(forms.ModelForm):
        telefone = forms.CharField(max_length=15, required=True)
    
        class Meta:
            model = User
            fields = ['username', 'first_name', 'last_name', 'email', 'password']
    
  4. Atualize sua view de cadastro:

    Por fim, você precisa atualizar sua view de cadastro para salvar o campo de telefone no perfil do usuário. No seu arquivo views.py, faça as seguintes alterações:

    from django.shortcuts import render, redirect
    from django.contrib.auth.models import User
    from .forms import CadastroForms
    from .models import Profile
    
    def cadastro(request):
        form = CadastroForms()
    
        if request.method == 'POST':
            form = CadastroForms(request.POST)
    
            if form.is_valid():
                nome = form.cleaned_data['username']
                sobrenome = form.cleaned_data['last_name']
                telefone = form.cleaned_data['telefone']
                email_cadastro = form.cleaned_data['email']
                senha_cadastro = form.cleaned_data['password']
    
                usuario = User.objects.create_user(
                    username=nome,
                    last_name=sobrenome,
                    email=email_cadastro,
                    password=senha_cadastro,
                )
                usuario.save()
    
                # Cria o perfil do usuário e salva o telefone
                Profile.objects.create(user=usuario, telefone=telefone)
    
                return redirect('login')
    
        return render(request, 'usuarios/cadastro.html', {'form': form})
    

Com essas alterações, você deve conseguir adicionar um campo de telefone ao seu formulário de cadastro e salvar essa informação no banco de dados.

Espero ter ajudado e bons estudos!

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