Model类不声明显式的app_label,也不在INSTALLED_APPS的应用程序中

Fab*_*u78 7 python django python-sphinx

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

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

.. automodule:: wdland.models
    :members:
    :undoc-members:
    :show-inheritance:
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误

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.
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索,我在这里发现了一个解决方案Django 1.9弃用警告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:
Run Code Online (Sandbox Code Playgroud)

但是在编译时我得到了这个新的类似错误,我一直无法找到它的解决方案,也没理解以前的模型修复.

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.
Run Code Online (Sandbox Code Playgroud)

这里是相关的sphinx配置

#!/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()
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

小智 12

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

class BaseModel(models.Model):

    class Meta:
        abstract = True  # specify this model as an Abstract Model
        app_label = 'wdland'
Run Code Online (Sandbox Code Playgroud)

并使所有模型继承而不是通常的models.Model.

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

模型类wdland.models.Device不声明显式的app_label,也不在INSTALLED_APPS的应用程序中.

我也有一个不同的应用程序相同的错误.添加请求的"app_label"解决了这个问题.


Nee*_*mar -3

我认为你在django 设置中没有django.contrib.contenttypes这个。所以将其添加到django 设置中INSTALLED_APPSINSTALLED_APPS