﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
16259	State more clearly that django.contrib.ccontenttypes depends on django.contrib.sites	Piotr Czachur	nobody	"
I don't have django.contrib.sites inside my installed apps, and despite that BaseDatabaseCreation.create_test_db() assumes that I have Site model  which ends up with exception:
{{{
# BaseDatabaseCreation.create_test_db()
from django.db.models import get_model
Site = get_model('sites', 'Site')
if Site is not None and Site.objects.using(self.connection.alias).count() == 1:
    Site.objects.using(self.connection.alias).update(id=settings.SITE_ID)

Exception: django.db.utils.DatabaseError: relation ""django_site"" does not exist
}}}

Why get_model() returns Site instead of None, despite I don't have sites in my INSTALLED_APPS?
Because contenttypes (which I have in INSTALLED_APPS) does ""from django.contrib.sites.models import get_current_site"", and in that moment Site model gets registered.
{{{
  /tmp/django/db/backends/creation.py(239)create_test_db()
-> load_initial_data=False)
  /tmp/django/core/management/__init__.py(166)call_command()
-> return klass.execute(*args, **defaults)
  /tmp/django/core/management/base.py(219)execute()
-> self.validate()
  /tmp/django/core/management/base.py(243)validate()
-> from django.core.management.validation import get_validation_errors
  /tmp/django/core/management/validation.py(3)<module>()
-> from django.contrib.contenttypes.generic import GenericForeignKey, GenericRelation
  /tmp/django/contrib/contenttypes/generic.py(14)<module>()
-> from django.contrib.admin.options import InlineModelAdmin, flatten_fieldsets
  /tmp/django/contrib/admin/__init__.py(6)<module>()
-> from django.contrib.admin.sites import AdminSite, site
  /tmp/django/contrib/admin/sites.py(5)<module>()
-> from django.contrib.admin.forms import AdminAuthenticationForm
  /tmp/django/contrib/admin/forms.py(4)<module>()
-> from django.contrib.auth.forms import AuthenticationForm
  /tmp/django/contrib/auth/forms.py(4)<module>()
-> from django.contrib.sites.models import get_current_site
> /tmp/django/contrib/sites/models.py(6)<module>()
-> ...
}}}

My final question is: is get_model() a good way to determine if some model is really ""enabled"" inside my project?
Maybe checking INSTALLED_APPS for application_name would be better solution.
"	Cleanup/optimization	closed	Documentation	dev	Normal	worksforme			Accepted	0	0	0	0	0	0
