1
resposta

[Dúvida] Como fazer para obter o usuário logado automaticamente?

Da forma como foi feito na aula, ao preencher o formulário para inserir uma nova imagem, no campo "Usuário", o usuário precisa selecionar o próprio nome. Como faço para que o nome do usuário seja inserido no banco de dados automaticamente sem que seja necessário selecionar o próprio nome?

Tentei criar um "campo invisível" no formulário, e funcionou (o campo não aparece na tela). Mas não sei como passar o nome do usuário ou a id do usuário como valor. Esse é o atributo de widgets no forms.py:

widgets = {
    'servico': forms.Select(attrs={'class': 'select'}),
    'mes': forms.Select(attrs={'class': 'select'}),
    'dia': forms.Select(attrs={'class': 'select'}),
    'horario': forms.Select(attrs={'class': 'select'}),
    'usuario': forms.HiddenInput(),
}
1 resposta

Oi, Mari, tudo certo?

Você pode fazer isso na sua view, sem precisar que o usuário selecione o próprio nome.

Vou deixar dois exemplos de código abaixo:

  • Modifique sua view para adicionar o usuário logado antes de salvar o formulário:
from django.contrib import messages
from django.shortcuts import redirect, render
from .forms import FotografiaForms

def nova_imagem(request):
    if not request.user.is_authenticated:
        messages.error(request, 'Usuário não logado')
        return redirect('login')

    if request.method == 'POST':
        form = FotografiaForms(request.POST)
        if form.is_valid():
            nova_fotografia = form.save(commit=False)
            nova_fotografia.usuario = request.user  # Aqui você define o usuário logado
            nova_fotografia.save()
            messages.success(request, 'Nova fotografia cadastrada!')
            return redirect('index')
    else:
        form = FotografiaForms()

    return render(request, 'galeria/nova_imagem.html', {'form': form})
  • Remova o campo "Usuário" do formulário, já que ele será preenchido automaticamente na view:
class FotografiaForms(forms.ModelForm):
    class Meta:
        model = Fotografia
        exclude = ['publicada', 'usuario']  # Remova o campo 'usuario' daqui
        labels = {
            'descricao': 'Descrição',
            'data_fotografia': 'Data de registro',
        }

Se outra dúvida surgir, fique à vontade para postar aqui.

Abraços!

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