diff --git a/django/contrib/sites/models.py b/django/contrib/sites/models.py index c8b395e36bc..9b1697e251a 100644 --- a/django/contrib/sites/models.py +++ b/django/contrib/sites/models.py @@ -41,12 +41,18 @@ class Site(models.Model): def __unicode__(self): return self.domain - + + def save(self, *args, **kwargs): + super(Site, self).save(*args, **kwargs) + # Cached information will likely be incorrect now. + if self.id in SITE_CACHE: + del SITE_CACHE[self.id] + def delete(self): pk = self.pk super(Site, self).delete() try: - del(SITE_CACHE[pk]) + del SITE_CACHE[pk] except KeyError: pass diff --git a/django/contrib/sites/tests.py b/django/contrib/sites/tests.py index b607f021d5d..e3fa81b9d11 100644 --- a/django/contrib/sites/tests.py +++ b/django/contrib/sites/tests.py @@ -3,7 +3,7 @@ >>> from django.conf import settings >>> Site(id=settings.SITE_ID, domain="example.com", name="example.com").save() ->>> # Make sure that get_current() does not return a deleted Site object. +# Make sure that get_current() does not return a deleted Site object. >>> s = Site.objects.get_current() >>> isinstance(s, Site) True @@ -13,4 +13,17 @@ True Traceback (most recent call last): ... DoesNotExist: Site matching query does not exist. + +# After updating a Site object (e.g. via the admin), we shouldn't return a +# bogus value from the SITE_CACHE. +>>> _ = Site.objects.create(id=settings.SITE_ID, domain="example.com", name="example.com") +>>> site = Site.objects.get_current() +>>> site.name +u"example.com" +>>> s2 = Site.objects.get(id=settings.SITE_ID) +>>> s2.name = "Example site" +>>> s2.save() +>>> site = Site.objects.get_current() +>>> site.name +u"Example site" """