問題

私はスフィンクスを使用していて、私の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.
 

いくつかのGoogle検索の後、私はここで Django 1.9の非推奨警告app_label からのコメントを参照してください。 14:54 "

私はmodels.pyに入り、models.pyで持っていたすべてのクラスに上記の投稿ごとに "class Meta:app_label"を追加しました。これは問題を修正し、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フォルダと同じレベルにあります。

トピックで同様のスレッドを読むことは、呼び出されたときにまだロードされていないモジュールを指しているようです。私はスフィンクスと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
 

  ベストアンサー

私の解決策は、あなたのアプリ内であなたのmodels.pyにBaseModel抽象クラスを作成することでした。

 class BaseModel(models.Model):

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

すべてのモデルを通常のmodels.Modelの代わりにこれから継承させました。

それを解決するために、私はエラーメッセージを把握しようとする基本に行きました。

モデルクラスwdland.models.Deviceは明示的なapp_labelを宣言せず、INSTALLED_APPSのアプリケーションにはありません。

別のアプリでも同じエラーが発生しました。要求された "app_label"を追加すると問題が解決しました。

  同じタグがついた質問を見る

pythondjangopython-sphinx