From 856a39e841080abc34e8ae3bb2b20f780c33762d Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Thu, 21 Jan 2010 01:40:21 +0000 Subject: Fixed #12577. Reverted some changes from [12098] since [12206] made them unneccessary. Also, added a test for using generic inlines with unique_together. Thanks for the report, Raffaele Salmaso. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12268 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../regressiontests/generic_inline_admin/models.py | 21 +++++++++++++++++++++ .../regressiontests/generic_inline_admin/tests.py | 22 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) (limited to 'tests/regressiontests/generic_inline_admin') diff --git a/tests/regressiontests/generic_inline_admin/models.py b/tests/regressiontests/generic_inline_admin/models.py index 9f1bbadd3e..2925b7a801 100644 --- a/tests/regressiontests/generic_inline_admin/models.py +++ b/tests/regressiontests/generic_inline_admin/models.py @@ -72,3 +72,24 @@ class MediaExcludeInline(generic.GenericTabularInline): admin.site.register(EpisodeExclude, inlines=[MediaExcludeInline]) +# +# Generic inline with unique_together +# + +class PhoneNumber(models.Model): + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + content_object = generic.GenericForeignKey('content_type', 'object_id') + phone_number = models.CharField(max_length=30) + + class Meta: + unique_together = (('content_type', 'object_id', 'phone_number',),) + +class Contact(models.Model): + name = models.CharField(max_length=50) + phone_numbers = generic.GenericRelation(PhoneNumber) + +class PhoneNumberInline(generic.GenericTabularInline): + model = PhoneNumber + +admin.site.register(Contact, inlines=[PhoneNumberInline]) diff --git a/tests/regressiontests/generic_inline_admin/tests.py b/tests/regressiontests/generic_inline_admin/tests.py index 0cf1f4ea69..21704cd8de 100644 --- a/tests/regressiontests/generic_inline_admin/tests.py +++ b/tests/regressiontests/generic_inline_admin/tests.py @@ -176,3 +176,25 @@ class GenericInlineAdminParametersTest(TestCase): response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeexclude/%s/' % e.pk) formset = response.context['inline_admin_formsets'][0].formset self.failIf('url' in formset.forms[0], 'The formset has excluded "url" field.') + +class GenericInlineAdminWithUniqueTogetherTest(TestCase): + fixtures = ['users.xml'] + + def setUp(self): + self.client.login(username='super', password='secret') + + def tearDown(self): + self.client.logout() + + def testAdd(self): + post_data = { + "name": u"John Doe", + # inline data + "generic_inline_admin-phonenumber-content_type-object_id-TOTAL_FORMS": u"1", + "generic_inline_admin-phonenumber-content_type-object_id-INITIAL_FORMS": u"0", + "generic_inline_admin-phonenumber-content_type-object_id-0-id": "", + "generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555", + } + response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/contact/add/') + response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/contact/add/', post_data) + self.failUnlessEqual(response.status_code, 302) # redirect somewhere -- cgit v1.3