【问题标题】:django admin.py for an app一个应用程序的 django admin.py
【发布时间】:2013-06-10 09:49:57
【问题描述】:

我正在关注此处包含的教程:

http://www.djangobook.com/en/2.0/chapter06.html

说明是使用以下代码在 app 文件夹中创建一个名为 admin.py 的文件:

from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

但是,在我这样做之后,我在第二行收到一条错误消息:

没有名为 books.models 的模块

我在这里发现了一个类似的问题,但没看懂答案:

Django admin page error

感谢您的帮助!

【问题讨论】:

  • 你有一个名为books 的模块和一个__init__.py 文件吗?
  • 您的books 应用相对于mysite 目录在哪里?您的 Django 项目实际上是否命名为“mysite”?
  • 它没有被命名为 mysite,但这不是我犯的错误 - 在我的文件中,我使用正确的项目名称 djangobook1。请在下面查看我对修复它的解释,也许您可​​以帮助我澄清这种行为。基本上我不得不将其更改为仅从 books.models 导入 Publisher, Author, Book

标签: django django-admin


【解决方案1】:

确保您在 books 目录中有一个 __init__.py,以便 Python 将其识别为一个模块。

【讨论】:

  • 我的书籍目录中有__init__.py,它位于我的项目目录中。这是由 python manage.py startapp books 自动创建的
  • 文件夹books/也需要它
  • 运行 python manage.py shell 并从那里尝试 import mysite.books 看看它说了什么
  • 它在C:\Users\username\djangobook1\books,其中djangobook1是项目目录。我应该有第二个书籍文件夹...
  • 您是否在 settings.py 中将书籍添加到已安装的应用程序中?
【解决方案2】:

你真的创建了Book 模型了吗?以下是来自the tutorial you're following的模型定义:

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title

【讨论】:

  • 是的,我在 books 目录中的 models.py 中拥有该模型以及 Publisher 和 Author 模型。
【解决方案3】:

我相信我在这里找到了答案:

ImportError: No module named books.models

无论出于何种原因,因为在设置文件中我在安装的应用程序下只有“书籍”,所以我的 admin.py 应该是:

从 books.models 导入出版商、作者、图书

而不是

从 djangobook1.books.models 导入出版商、作者、书籍

现在我不确定这里的规则是什么,但这解决了我的问题...

【讨论】:

  • 其实可以使用books.modelsmysite.books.models。如果你暗示一个应用程序驻留在你的项目目录中(假设它确实存在),Django 不会大惊小怪。
猜你喜欢
  • 2013-09-02
  • 2023-03-05
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2014-07-30
相关资源
最近更新 更多