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

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 .

Leave a Comment