【问题标题】:NameError: name 'BookAdmin' is not defined - DjangoNameError:未定义名称'BookAdmin' - Django
【发布时间】:2017-08-17 09:44:06
【问题描述】:

我正在使用 Django 和 Python 3.6 我遇到了这个错误:NameError: name 'BookAdmin' is not defined and

这是我在“商店”应用程序中的代码 (models.py)。

from django.db import models
from django.utils import timezone

class Book(models.Model):
     title = models.CharField(max_length=200)
     author = models.CharField(max_length=200)
     description = models.TextField()   
     publish_date = models.DateField(default=timezone.now)

在 admin.py 中

from django.contrib import admin

from .models import Book

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author')

    admin.site.register(Book, BookAdmin)

错误是

    File "C:\venv\lib\site-packages\django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\venv\lib\site-packages\django\apps\registry.py", line 115, in populate
    app_config.ready()
  File "C:\venv\lib\site-packages\django\contrib\admin\apps.py", line 23, in ready
    self.module.autodiscover()
  File "C:\venv\lib\site-packages\django\contrib\admin\__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "C:\venv\lib\site-packages\django\utils\module_loading.py", line 50, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "C:\venv\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "C:\venv\bookstore\store\admin.py", line 5, in <module>
    class BookAdmin(admin.ModelAdmin):
  File "C:\venv\bookstore\store\admin.py", line 8, in BookAdmin
    admin.site.register(Book, BookAdmin)
NameError: name 'BookAdmin' is not defined

【问题讨论】:

  • 以下答案对您的情况有效吗?

标签: python django


【解决方案1】:
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author')

admin.site.register(Book, BookAdmin)

在您的类定义之外注册您的管理员。不在里面!

或者这样做:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author')

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2018-07-14
    • 2017-12-25
    • 2021-07-17
    • 2012-05-13
    • 2020-02-24
    • 2021-04-14
    • 2020-08-17
    • 2021-03-09
    相关资源
    最近更新 更多