I am using sphinx and was trying to generate documentation for my Django project. I decided to first try to document the models so in my .rst file I did this
wdland\.models
==============
.. automodule:: wdland.models
:members:
:undoc-members:
:show-inheritance:
But the get the following errors
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.
After some google search I found a solution here Django 1.9 deprecation warnings app_label see comment from Роман Арсеньев on “Jan 11 '16 at 14:54”
I went in my models.py and added “class Meta: app_label” as per above post to every single class I had in models.py. This fixed the problem and I was able to generate the documentation for my models using the sphinx-build script.
Now I wanted to do the same for views.py and did this in my .rst file
wdland\.views
=============
.. automodule:: wdland.views
:members:
:undoc-members:
:show-inheritance:
But on compile I get this new similar error and I have been unable to find a solution for it nor did understand the previous fix for models.
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.
Here the relevant sphinx configuration
#!/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 is a Django app an is listed in my INSTALLED_APPS tuple in the settings file. The sphinx docs folder is at the same level as the wdland folder.
Reading similar threads on the topic seem to point to modules that are not yet loaded when being called. I have no clue how to fix as not experienced in either sphinx and Django. Any idea on how I can fix this?
Trying to document urls.py would yield similar errors.
EDIT: Here the begining of my 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
app_label is used when you have models in a place in which django doesn't know to which app they belong.
My solution was to create a BaseModel abstract class on your models.py
within your app, on your error this may be:
class BaseModel(models.Model):
class Meta:
abstract = True # specify this model as an Abstract Model
app_label = 'wdland'
And made all models inherit from this instead of the usual models.Model.
To solve it, I went to the basics of trying to figure out the error message, which states:
Model class wdland.models.Device doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
I also had the same error with a different app. Adding the requested "app_label" solved the issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With