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.

Reply via email to