Author: carljm Date: 2011-09-21 15:46:48 -0700 (Wed, 21 Sep 2011) New Revision: 16868
Modified: django/trunk/django/contrib/gis/db/backends/spatialite/creation.py django/trunk/django/contrib/sites/management.py django/trunk/django/db/backends/creation.py Log: Fixed #16353 -- don't try to create Site objects on all databases. Refs #15573, #15346. Thanks Aymeric Augustin for the report and the patch. Modified: django/trunk/django/contrib/gis/db/backends/spatialite/creation.py =================================================================== --- django/trunk/django/contrib/gis/db/backends/spatialite/creation.py 2011-09-21 22:45:25 UTC (rev 16867) +++ django/trunk/django/contrib/gis/db/backends/spatialite/creation.py 2011-09-21 22:46:48 UTC (rev 16868) @@ -56,14 +56,6 @@ 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: Modified: django/trunk/django/contrib/sites/management.py =================================================================== --- django/trunk/django/contrib/sites/management.py 2011-09-21 22:45:25 UTC (rev 16867) +++ django/trunk/django/contrib/sites/management.py 2011-09-21 22:46:48 UTC (rev 16868) @@ -3,14 +3,21 @@ """ 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() Modified: django/trunk/django/db/backends/creation.py =================================================================== --- django/trunk/django/db/backends/creation.py 2011-09-21 22:45:25 UTC (rev 16867) +++ django/trunk/django/db/backends/creation.py 2011-09-21 22:46:48 UTC (rev 16868) @@ -248,14 +248,6 @@ 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: -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.