Commit 65942eb3 authored by Carl Meyer's avatar Carl Meyer
Browse files

[1.3.X] Fixed #16353 -- don't try to create Site objects on all databases....

[1.3.X] Fixed #16353 -- don't try to create Site objects on all databases. Refs #15573, #15346. Thanks Aymeric Augustin for the report and the patch.

Backport of r16868 in trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.3.X@16869 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 3606f1f7
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -56,14 +56,6 @@ class SpatiaLiteCreation(DatabaseCreation):
            interactive=False,
            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.backends.db import BaseDatabaseCache
        for cache_alias in settings.CACHES:
+9 −2
Original line number Diff line number Diff line
@@ -3,14 +3,21 @@ Creates the default Site object.
"""

from django.db.models import signals
from django.db import router
from django.contrib.sites.models import Site
from django.contrib.sites import models as site_app

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:
            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)
    Site.objects.clear_cache()

+0 −9
Original line number Diff line number Diff line
@@ -375,15 +375,6 @@ class BaseDatabaseCreation(object):
            interactive=False,
            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
        if 'django.contrib.sites' in settings.INSTALLED_APPS:
            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.backends.db import BaseDatabaseCache
        for cache_alias in settings.CACHES: