【问题标题】:Model class doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS模型类未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中
【发布时间】:2017-07-23 17:57:16
【问题描述】:

我正在使用 sphinx 并试图为我的 Django 项目生成文档。我决定首先尝试记录模型,所以在我的 .rst 文件中我这样做了

wdland\.models
==============

.. automodule:: wdland.models
    :members:
    :undoc-members:
    :show-inheritance:

但得到以下错误

WARNING: /home/fabou/wdlandenvpy3/source/docs/wdland.rst:9: (WARNING/2) autodoc: failed to import module 'wdland.models'; the following exception was raised:
Traceback (most recent call last):
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/sphinx/ext/autodoc.py", line 657, in import_object
    __import__(self.modname)
  File "/home/fabou/wdlandenvpy3/source/wdland/models.py", line 35, in <module>
    class Device(models.Model):
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/db/models/base.py", line 118, in __new__
    "INSTALLED_APPS." % (module, name)
RuntimeError: Model class wdland.models.Device doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

经过一些谷歌搜索后,我在Django 1.9 deprecation warnings app_label 找到了解决方案,请参阅 Роман Арсеньев 在“2016 年 1 月 11 日 14:54”的评论

我进入我的 models.py 并按照上面的帖子将“class Meta: app_label”添加到我在 models.py 中的每个类中。这解决了问题,我能够使用 sphinx-build 脚本为我的模型生成文档。

现在我想对 views.py 做同样的事情,并在我的 .rst 文件中这样做

wdland\.views
=============

.. automodule:: wdland.views
    :members:
    :undoc-members:
    :show-inheritance:

但在编译时,我得到了这个新的类似错误,我无法找到解决方案,也无法理解之前对模型的修复。

WARNING: /home/fabou/wdlandenvpy3/source/docs/wdland.rst:19: (WARNING/2) autodoc: failed to import module 'wdland.views'; the following exception was raised:
Traceback (most recent call last):
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/sphinx/ext/autodoc.py", line 657, in import_object
    __import__(self.modname)
  File "/home/fabou/wdlandenvpy3/source/wdland/views.py", line 2, in <module>
    from . import views
  File "/home/fabou/wdlandenvpy3/source/wdland/views.py", line 19, in <module>
    from .forms import TicketForm, TicketAmendForm
  File "/home/fabou/wdlandenvpy3/source/wdland/forms.py", line 1, in <module>
    from django.contrib.auth.forms import AuthenticationForm
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/auth/forms.py", line 12, in <module>
    from django.contrib.auth.models import User
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/auth/models.py", line 6, in <module>
    from django.contrib.contenttypes.models import ContentType
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/contenttypes/models.py", line 139, in <module>
    class ContentType(models.Model):
  File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/db/models/base.py", line 118, in __new__
    "INSTALLED_APPS." % (module, name)
RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

这里是相关的狮身人面像配置

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import django
import os
import sphinx_rtd_theme
import sys

from django.conf import settings

sys.path.insert(0, os.path.abspath('../'))
settings.configure()
django.setup()

wdland 是一个 Django 应用程序,它列在设置文件的我的 INSTALLED_APPS 元组中。 sphinx docs 文件夹与 wdland 文件夹处于同一级别。

阅读有关该主题的类似线程似乎指向在调用时尚未加载的模块。我不知道如何解决在 sphinx 和 Django 中都没有经验的问题。关于如何解决这个问题的任何想法?

尝试记录 urls.py 会产生类似的错误。

编辑: 这里是我的 view.py 的开始

import datetime

from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import Http404, HttpResponse
from django.template.loader import render_to_string
from django.shortcuts import render, HttpResponseRedirect
from django.views import generic
from random import randint
from script.serversnmp import get_ubuntu_snmp, get_esxi_snmp
from script.wdlandtools import get_monthly_sess_hour_stats,\
                                get_monthly_sess_nb_stats,\
                                get_monthly_ticket_stats,\
                                get_ticket_category_stats,\
                                clean_usersession_tbl, update_usertotals_tbl,\
                                send_email_notification, get_adsl_usage
from wdland.models import Device, UserSession, SupportTicket, News, UserTotals,\
                            SavedUsrSess
from .forms import TicketForm, TicketAmendForm

from jchart import Chart
from jchart.config import Axes, DataSet, rgba

【问题讨论】:

  • 在此处发布 INSTALLED_APPS 列表
  • INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'wdland', 'jchart', ]@NeErAjKuMaR

标签: python django python-sphinx


【解决方案1】:

我的解决方案是在您的应用程序中的 models.py 上创建一个 BaseModel 抽象类,如果您的错误可能是:

class BaseModel(models.Model):

    class Meta:
        abstract = True  # specify this model as an Abstract Model
        app_label = 'wdland'

并让所有模型都继承自 this 而不是通常的 models.Model。

为了解决这个问题,我开始尝试找出错误消息的基础知识,其中指出:

模型类 wdland.models.Device 没有明确声明 app_label 并且不在 INSTALLED_APPS 的应用程序中。

我在使用不同的应用程序时也遇到了同样的错误。添加请求的“app_label”解决了这个问题。

【讨论】:

  • 这个解决方案对我不起作用,但是出于某种原因,手动将class Meta: app_label = '&lt;app_name&gt;' 添加到每个模型中会这样做
【解决方案2】:

我认为你在 django 设置的 INSTALLED_APPS 中没有 django.contrib.contenttypes 这个。所以在 django 设置的 INSTALLED_APPS 中添加它

【讨论】:

  • 您在第 2 行中提到的 .在 views.py 中导入视图。这是什么?
  • 嗯,我真的不知道这是从哪里来的(我没有注意到),正如您在我的 EDIT (views.py) 中看到的那样,我在第 2 行没有任何内容。第 19 行确实另一方面存在。
  • 在您的回溯中检查第 2 行代码是否存在。从 。导入视图代码在那里
  • 我的 view.py 中没有那行来自,但肯定不能来自我的views.py
  • 其实并不是这样,view.py中的traceback代码是有参考的。
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 2018-12-29
  • 2019-08-28
  • 2016-05-25
  • 2020-05-16
  • 2017-09-05
  • 2023-02-18
  • 2020-08-13
相关资源
最近更新 更多