1
resposta

Python: NameError: name

Estou fazendo o "Tutorial Django Parte 4: Django admin site" e a na parte do tutorial que ensina a registrar uma class ModelAdmin e pede para mudar os códigos do meu admin.py, começa a gerar o Error: name "Author" is not Defined.

Esse é o código antes desse tutorial:

from django.contrib import admin

# Register your models here.

from catalog.models import Author, Genre, Book, BookInstance, Language

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)
admin.site.register(Language)

E este é o código após o tutorial (e que ocasiona o erro):

from django.contrib import admin

# admin.site.register(Author)
# admin.site.register(Book)
# admin.site.register(BookInstance)

# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death'), assim que insiro

# Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin)
 
# Register the Admin classes for Book using the decorator
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

# Register the Admin classes for BookInstance using the decorator
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    pass
1 resposta

Olá, Harrian! Como vai?

O erro "NameError: name 'Author' is not defined" geralmente ocorre quando você tenta usar uma variável ou uma classe que ainda não foi definida. No seu caso, parece que o Django não está conseguindo encontrar a definição da classe "Author".

No seu código anterior, você importou a classe "Author" do módulo "catalog.models", assim:

from catalog.models import Author, Genre, Book, BookInstance, Language

Mas no seu código novo, essa linha de importação parece ter sido removida. Isso significa que quando você tenta usar a classe "Author" mais tarde, o Django não sabe o que é.

Para corrigir o erro, você deve adicionar a linha de importação de volta ao topo do seu arquivo, assim:

from django.contrib import admin
from catalog.models import Author, Genre, Book, BookInstance, Language

# admin.site.register(Author)
# admin.site.register(Book)
# admin.site.register(BookInstance)

# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')

# Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin)
 
# Register the Admin classes for Book using the decorator
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

# Register the Admin classes for BookInstance using the decorator
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    pass

Espero que isso resolva o seu problema, mas caso não resolva, peço que compartilhe o link desse tutorial para que eu tenha mais contexto da situação.

Bons estudos!

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