私はスフィンクスを使用していて、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非推奨警告app_label 「2016年1月11日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タプルにリストされています。sphinxdocsフォルダーは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」を追加すると、問題が解決しました。