Fixed #16353 -- don't try to create Site objects on all databases. Refs #15573, #15346. Thanks Aymeric Augustin for the report and the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16868 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
cfadc36be5
commit
f91af72523
|
@ -56,14 +56,6 @@ class SpatiaLiteCreation(DatabaseCreation):
|
||||||
interactive=False,
|
interactive=False,
|
||||||
database=self.connection.alias)
|
database=self.connection.alias)
|
||||||
|
|
||||||
# One effect of calling syncdb followed by flush is that the id of the
|
|
||||||
# default site may or may not be 1, depending on how the sequence was
|
|
||||||
# reset. If the sites app is loaded, then we coerce it.
|
|
||||||
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)
|
|
||||||
|
|
||||||
from django.core.cache import get_cache
|
from django.core.cache import get_cache
|
||||||
from django.core.cache.backends.db import BaseDatabaseCache
|
from django.core.cache.backends.db import BaseDatabaseCache
|
||||||
for cache_alias in settings.CACHES:
|
for cache_alias in settings.CACHES:
|
||||||
|
|
|
@ -3,14 +3,21 @@ Creates the default Site object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
|
from django.db import router
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.contrib.sites import models as site_app
|
from django.contrib.sites import models as site_app
|
||||||
|
|
||||||
def create_default_site(app, created_models, verbosity, db, **kwargs):
|
def create_default_site(app, created_models, verbosity, db, **kwargs):
|
||||||
if Site in created_models:
|
# Only create the default sites in databases where Django created the table
|
||||||
|
if Site in created_models and router.allow_syncdb(db, Site) :
|
||||||
if verbosity >= 2:
|
if verbosity >= 2:
|
||||||
print "Creating example.com Site object"
|
print "Creating example.com Site object"
|
||||||
s = Site(domain="example.com", name="example.com")
|
# The default settings set SITE_ID = 1, and some tests in Django's test
|
||||||
|
# suite rely on this value. However, if database sequences are reused
|
||||||
|
# (e.g. in the test suite after flush/syncdb), it isn't guaranteed that
|
||||||
|
# the next id will be 1, so we coerce it. See #15573 and #16353. This
|
||||||
|
# can also crop up outside of tests - see #15346.
|
||||||
|
s = Site(pk=1, domain="example.com", name="example.com")
|
||||||
s.save(using=db)
|
s.save(using=db)
|
||||||
Site.objects.clear_cache()
|
Site.objects.clear_cache()
|
||||||
|
|
||||||
|
|
|
@ -248,14 +248,6 @@ class BaseDatabaseCreation(object):
|
||||||
interactive=False,
|
interactive=False,
|
||||||
database=self.connection.alias)
|
database=self.connection.alias)
|
||||||
|
|
||||||
# One effect of calling syncdb followed by flush is that the id of the
|
|
||||||
# default site may or may not be 1, depending on how the sequence was
|
|
||||||
# reset. If the sites app is loaded, then we coerce it.
|
|
||||||
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)
|
|
||||||
|
|
||||||
from django.core.cache import get_cache
|
from django.core.cache import get_cache
|
||||||
from django.core.cache.backends.db import BaseDatabaseCache
|
from django.core.cache.backends.db import BaseDatabaseCache
|
||||||
for cache_alias in settings.CACHES:
|
for cache_alias in settings.CACHES:
|
||||||
|
|
Loading…
Reference in New Issue