RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

后端 未结 5 1842
情书的邮戳
情书的邮戳 2020-12-05 03:52

I am building an application with Django Rest Framework and AngularJs. I am using Django-rest-auth for my authentication purposes, although, I have not been able to set it u

相关标签:
5条回答
  • 2020-12-05 04:14

    I landed on this post via Google search. My problem was running tests that blew up with the error:

    RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
    

    This was running on Python 2.7.x with absolute imports. As mentioned by Colton Hicks in the comments, below, this can also happen with Python 3 (pytest 3.2.3 with Django 1.11.4).

    In my tests.py:

    from __future__ import absolute_import
    [...]
    from .models import Demographics, Term
    

    After changing the relative import to an absolute import the problem went away:

    from taxonomy.models import Demographics, Term
    

    HTH

    0 讨论(0)
  • 2020-12-05 04:18

    The fix

    Just add Django's Sites framework to your apps and set SITE_ID to 1 in your settings.

    INSTALLED_APPS = [
        ...
        'django.contrib.sites',
    ]
    
    SITE_ID = 1
    

    Why does this happen?

    Django's Sites Framework is a contributed module bundled with the core library that allows for the use of a single Django application/codebase with different sites (that can use different databases, logic in views, etc). The SITE_ID setting, as stated in the docs, "is used so that application data can hook into specific sites and a single database can manage content for multiple sites."

    In this particular case AllAuth requires the Sites Framework in order to function properly. Many other third-party libraries are built to safely handle cases where multiple sites may be present and as such may be best .

    0 讨论(0)
  • 2020-12-05 04:18

    I got the error above. However my problem was the in the urls.py. I was following PyDanny cookiecutter django recipe. My error was to put in the urls.py this line:

        url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),
    

    when I corrected to this:

        url(r'^demo/', include('demoapp.urls', namespace='demoapp')),
    

    all was well. I also changed my local apps (I did this first and so the critical error was the url misconfiguration):

    LOCAL_APPS = [
        # Your stuff: custom apps go here
        'demoapp.apps.DemoAppConfig',
    ]
    
    0 讨论(0)
  • 2020-12-05 04:33

    Try adding the app_label = 'yourApp' in the models Meta class:

    class Meta:
    
        app_label = 'yourApp'
    
    0 讨论(0)
  • 2020-12-05 04:34

    Just add 'django.contrib.sites', to INSTALLED_APPS and set SITE_ID = 1 in your settings.py file.

    0 讨论(0)
提交回复
热议问题