summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2011-10-17 00:56:32 +0000
committerCarl Meyer <carl@oddbird.net>2011-10-17 00:56:32 +0000
commit62afd58c87318aa22970e86a8f80538befcadfc4 (patch)
tree65060be5b43cc1766525558fb0647d4794589ed9
parentd48510cc6b772048454f62d0b7caa11a75e60d79 (diff)
Fixed #17057 -- Corrected flatpage url uniqueness validation to account for flatpage editing.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17000 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/flatpages/forms.py8
-rw-r--r--django/contrib/flatpages/tests/forms.py21
2 files changed, 26 insertions, 3 deletions
diff --git a/django/contrib/flatpages/forms.py b/django/contrib/flatpages/forms.py
index b2811ff618..3916c85a89 100644
--- a/django/contrib/flatpages/forms.py
+++ b/django/contrib/flatpages/forms.py
@@ -16,11 +16,13 @@ class FlatpageForm(forms.ModelForm):
url = self.cleaned_data.get('url', None)
sites = self.cleaned_data.get('sites', None)
- flatpages_with_same_url = FlatPage.objects.filter(url=url)
+ same_url = FlatPage.objects.filter(url=url)
+ if self.instance.pk:
+ same_url = same_url.exclude(pk=self.instance.pk)
- if flatpages_with_same_url.filter(sites__in=sites).exists():
+ if same_url.filter(sites__in=sites).exists():
for site in sites:
- if flatpages_with_same_url.filter(sites=site).exists():
+ if same_url.filter(sites=site).exists():
raise forms.ValidationError(
_('Flatpage with url %s already exists for site %s'
% (url, site)))
diff --git a/django/contrib/flatpages/tests/forms.py b/django/contrib/flatpages/tests/forms.py
index 83437ba733..7f617d52a5 100644
--- a/django/contrib/flatpages/tests/forms.py
+++ b/django/contrib/flatpages/tests/forms.py
@@ -1,5 +1,6 @@
from django.conf import settings
from django.contrib.flatpages.forms import FlatpageForm
+from django.contrib.flatpages.models import FlatPage
from django.test import TestCase
class FlatpageAdminFormTests(TestCase):
@@ -35,3 +36,23 @@ class FlatpageAdminFormTests(TestCase):
self.assertEqual(
f.errors,
{'__all__': [u'Flatpage with url /myflatpage1 already exists for site example.com']})
+
+ def test_flatpage_admin_form_edit(self):
+ """
+ Existing flatpages can be edited in the admin form without triggering
+ the url-uniqueness validation.
+
+ """
+ existing = FlatPage.objects.create(
+ url="/myflatpage1", title="Some page", content="The content")
+ existing.sites.add(settings.SITE_ID)
+
+ data = dict(url='/myflatpage1', **self.form_data)
+
+ f = FlatpageForm(data=data, instance=existing)
+
+ self.assertTrue(f.is_valid(), f.errors)
+
+ updated = f.save()
+
+ self.assertEqual(updated.title, "A test page")