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

Django Rest Frameword - NameError

Boa noite!

Está aparecendo um NameError:


admin.py", line 23, in <module>
    admin.site.register(Matricula, Matriculas)      
NameError: name 'Matricula' is not defined. Did you 
mean: 'Matriculas'?

Alguém pode ajudar?

4 respostas
solução!

Segue meu models.py:

from django.db import models

class Aluno(models.Model):
    nome = models.CharField(max_length=30)
    rg = models.CharField(max_length=9)
    cpf = models.CharField(max_length=11)
    data_nascimento = models.DateField()

    def __str__(self):
        return self.nome

class Curso(models.Model):
    NIVEL = (
        ('B', 'Básico'),
        ('I', 'Intermediário'),
        ('A', 'Avançado')
    )
    codigo_curso = models.CharField(max_length=10)
    descricao = models.CharField(max_length=100)
    nivel = models.CharField(max_length=1, choices=NIVEL, blank=False, null=False, default='B')

    def __str__(self):
        return self.descricao

class Matricula(models.Model):
    PERIODO = (
            ("M", "Matutino"),
            ("V", "Vespertino"),
            ("N", "Noturno")
    )
    aluno = models.ForeignKey(Aluno, on_delete=models.CASCADE)
    curso = models.ForeignKey(Aluno, on_delete=models.CASCADE)
    periodo = models.CharField(max_length=1, choices=PERIODO, blank=False, null=False, default="M")

E meu admin.py:

from django.contrib import admin
from escola.models import Aluno, Curso, Matricula

class Alunos(admin.ModelAdmin):
    list_display = ('id', 'nome', 'rg', 'cpf', 'data_nascimento')
    list_display_links = ('id', 'nome')
    search_fields = ('nome', )
    list_per_page = 20

admin.site.register(Aluno, Alunos)

class Cursos(admin.ModelAdmin):
    list_display = ('id', 'codigo_curso', 'descricao')
    list_display_links = ('id', 'codigo_curso')
    search_fields = ('codigo_curso', )

admin.site.register(Curso, Cursos)

class Matriculas(admin.ModelAdmin):
    list_display = ('id', 'aluno', 'curso', 'periodo')
    list_display_links = ('id', )

admin.site.register(Matricula, Matriculas)

Olá Chanrley, tudo bem com você?

O erro NameError: name 'Matricula' is not defined, está informando que não foi encontrado a classe modelo Matricula para realizar sua exibição no painel admin. Utilizando apenas o código disponibilizado não foi possível simular este erro.

O código possui um ponto que necessita realizar uma correção, caso não seja realizado é gerado um erro de exceção (Exception in thread django-main-thread). Abaixo deixo descrito como realizar a correção do código.

No código do arquivo models.py que foi disponibilizado na postagem, será necessário realizar uma correção na classe Matricula. Quando ocorre a declaração do atributo curso a chave estrangeira está sendo referenciada com a classe Aluno, o correto será utilizar a classe Curso. Como apresentado abaixo.

curso = models.ForeignKey(Curso, on_delete=models.CASCADE)

Após a mudança, salve o arquivo models.py e inicie novamente o servidor usando o comando python manage.py runserver. Ressalto que após essa correção descrita acima, o código funcionou como esperado, não apresentando outros erros. Realizei testes e simulações utilizados seu código com os arquivos da aula.

Utilizando apenas uma parte do projeto não consegui simular o mesmo erro recebido por você, peço que compartilhe seu projeto completo, assim poderei realizar testes e simulações com todo o código.

Você pode disponibilizar a pasta compactada do seu projeto em um site de compartilhamento de arquivos (exemplo, Google Drive) e enviar na resposta desta postagem o link de compartilhamento para o projeto.

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

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Fico no aguardo e à disposição

Felippe Rafael, desculpe. Marquei a solução errada como minha resposta, era para ser a sua. Quer que eu abra outro tópico pra eu fazer direito?

Oiii Chanrley, tudo bem com você?

Fico feliz em saber que o erro foi solucionado. Não será necessário criar uma postagem para corrigir o uso do "Marcar como solução". O seu retorno informando que foi solucionado é muito importante, assim as pessoas que lerem a postagem completa vão saber que a correção para o código sugerida, foi a solução para o erro.

Caso tenha novas dúvidas, pode contar sempre com o fórum da Alura.

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

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!