Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Bug] Aula 04 Lógica de novo item - Error during template rendering

Boa noite!

Estou tentando executar os passos da aula, mas deu um erro apesar de ter digitado tudo corretamente, podem ajudar? Erro:

Error during template rendering

In template C:\cursos\alura\2915-projeto-django-4-aula_1\templates\galeria\nova_imagem.html, error at line 9
ModelForm has no model class specified.
1     {% extends 'shared/base.html' %}
2     {% load static %}
3     {% block content %}
4     
5                 <section class="galeria" style="margin-left: 5em">
6                     <form action="{% url 'login' %}" method="POST">
7                         {% csrf_token %}
8                         <div class="row">
9                             {% for field in form.visible_fields %}
10                             <div class="col-12 col-lg-12" style="margin-bottom: 10px;">
11                                 <label for="{{ field.id_for_label }}" style="color:#D9D9D9; margin-bottom: 5px;">{{field.label}}</label>
12                                 {{ field }}
13                             </div>
14                             {% endfor %}
15                         </div>
16                         <div>
17                             <button type="submit" class="btn btn-success col-12" style="padding: top 5px;">Logar</button>
18                         </div>
19                     </form>
4 respostas

Segue os trechos de código. nova_imagem.html:

{% extends 'shared/base.html' %}
{% load static %}
{% block content %}

            <section class="galeria" style="margin-left: 5em">
                <form action="{% url 'login' %}" method="POST">
                    {% csrf_token %}
                    <div class="row">
                        {% for field in form.visible_fields %}
                        <div class="col-12 col-lg-12" style="margin-bottom: 10px;">
                            <label for="{{ field.id_for_label }}" style="color:#D9D9D9; margin-bottom: 5px;">{{field.label}}</label>
                            {{ field }}
                        </div>
                        {% endfor %}
                    </div>
                    <div>
                        <button type="submit" class="btn btn-success col-12" style="padding: top 5px;">Logar</button>
                    </div>
                </form>
            </section>
        </main>
    </div>
</body>

{% endblock %}

forms.py:

from django import forms 
from apps.galeria.models import Fotografia


class FotografiaForms(forms.ModelForm):
    class Meta:
        model: Fotografia
        exclude = ['publicada',]

        widgets = {
            'nome': forms.TextInput(attrs={'class':'form-control'}),
            'legenda': forms.TextInput(attrs={'class':'form-control'}),
            'categoria': forms.Select(attrs={'class':'form-control'}),
            'descricao': forms.Textarea(attrs={'class':'form-control'}),
            'foto': forms.FileInput(attrs={'class':'form-control'}),
            'data_fotografia': forms.DateInput(
                format = '%d/%m/%Y',
                attrs={
                    'type': 'date',
                    'class':'form-control',
                }
            ),
                'usuario': forms.Select(attrs={'class':'form-control'}),
        }

views.py:

from django.shortcuts import render, get_object_or_404, redirect

from apps.galeria.models import Fotografia
from apps.galeria.forms import FotografiaForms

from django.contrib import messages

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

    fotografias = Fotografia.objects.order_by("data_fotografia").filter(publicada=True)
    return render(request, 'galeria/index.html', {"cards": fotografias})

def imagem(request, foto_id):
    fotografia = get_object_or_404(Fotografia, pk=foto_id)
    return render(request, 'galeria/imagem.html', {"fotografia": fotografia})

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

    fotografias = Fotografia.objects.order_by("data_fotografia").filter(publicada=True)

    if "buscar" in request.GET:
        nome_a_buscar = request.GET['buscar']
        if nome_a_buscar:
            fotografias = fotografias.filter(nome__icontains=nome_a_buscar)

    return render(request, "galeria/buscar.html", {"cards": fotografias})

def nova_imagem(request):
    form = FotografiaForms
    return render(request, 'galeria/nova_imagem.html', {'form': form})

def editar_imagem(request):
    pass

def deletar_imagem(request):
    pass

urls.py:

from django.urls import path
from apps.galeria.views import \
index, imagem, buscar, nova_imagem, editar_imagem, deletar_imagem 

urlpatterns = [
    path('', index, name='index'),
    path('imagem/<int:foto_id>', imagem, name='imagem'),
    path('buscar', buscar, name='buscar'),
    path('nova_imagem', nova_imagem, name='nova_imagem'),
    path('editar_imagem', editar_imagem, name='editar_imagem'),
    path('deletar_imagem', deletar_imagem, name='deletar_imagem'),

]

Já tentei de tudo e não funciona. Alguém pode ajudar?

solução!

Olá Chanrley, tudo bem com você?

Após realizar testes e simulações com os códigos enviados em conjunto com o código da aula. Foi possível detectar que no código enviado será necessário realizar duas modificações, para que a rota nova_imagem não apresente erro ao ser acessada e receber os dados do formulário, deixo abaixo a descrição dos pontos que devem ser modificados.

  • No arquivo nova_imagem.html, localize a tag form e na propriedade action adicione o redirecionamento para a rota nova_imagem, ficando como apresentado abaixo:
      <form action="{% url 'nova_imagem' %}" method="POST">
  • No arquivo form.py, na classe Meta a variável model deve ser atribuída com o uso do sinal de igual (=), como apresentada abaixo:
      model = Fotografia
  • Após as mudanças aplicadas, salve os arquivos editados
  • Inicie o servidor com o comando python manage.py runserver
  • Agora, basta dar seguimento na aula Lógica de novo item a partir do minuto 5:40

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

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

Show. Me ajudou bastante. Muito obrigado! Abraços!!!