diff options
author | Anders Steinlein <anders@e5r.no> | 2014-03-05 21:19:40 +0100 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2014-05-15 07:25:35 -0400 |
commit | 4ef10f245ada0c7d5ae8dc31eebffa63790d40fb (patch) | |
tree | dffd7ca06862fa20b5fa0b4528ac8beeecaee9fa /tests/generic_inline_admin | |
parent | 860d31ac7a3bdd4b27db8b34b110b3d801ddaf8a (diff) | |
download | django-4ef10f245ada0c7d5ae8dc31eebffa63790d40fb.tar.gz |
Fixed #17642 -- Added min_num support to modelformsets, inlines, and the admin.
Thanks Stephen Burrows for work on the patch as well.
Forwardport of 2914f66983a92fcae55673c517dd8d01e8c238c4 from stable/1.7.x
Diffstat (limited to 'tests/generic_inline_admin')
-rw-r--r-- | tests/generic_inline_admin/admin.py | 17 | ||||
-rw-r--r-- | tests/generic_inline_admin/models.py | 20 | ||||
-rw-r--r-- | tests/generic_inline_admin/tests.py | 61 |
3 files changed, 53 insertions, 45 deletions
diff --git a/tests/generic_inline_admin/admin.py b/tests/generic_inline_admin/admin.py index d0ce4c70ef..46f6cf3e7f 100644 --- a/tests/generic_inline_admin/admin.py +++ b/tests/generic_inline_admin/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin from django.contrib.contenttypes.admin import GenericTabularInline -from .models import (Media, PhoneNumber, Episode, EpisodeExtra, Contact, - Category, EpisodePermanent, EpisodeMaxNum) +from .models import (Media, PhoneNumber, Episode, Contact, + Category, EpisodePermanent) site = admin.AdminSite(name="admin") @@ -18,17 +18,6 @@ class EpisodeAdmin(admin.ModelAdmin): ] -class MediaExtraInline(GenericTabularInline): - model = Media - extra = 0 - - -class MediaMaxNumInline(GenericTabularInline): - model = Media - extra = 5 - max_num = 2 - - class PhoneNumberInline(GenericTabularInline): model = PhoneNumber @@ -39,8 +28,6 @@ class MediaPermanentInline(GenericTabularInline): site.register(Episode, EpisodeAdmin) -site.register(EpisodeExtra, inlines=[MediaExtraInline]) -site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline]) site.register(Contact, inlines=[PhoneNumberInline]) site.register(Category) site.register(EpisodePermanent, inlines=[MediaPermanentInline]) diff --git a/tests/generic_inline_admin/models.py b/tests/generic_inline_admin/models.py index 0ae3c4b052..059aadc5ba 100644 --- a/tests/generic_inline_admin/models.py +++ b/tests/generic_inline_admin/models.py @@ -27,26 +27,6 @@ class Media(models.Model): def __str__(self): return self.url -# -# These models let us test the different GenericInline settings at -# different urls in the admin site. -# - -# -# Generic inline with extra = 0 -# - - -class EpisodeExtra(Episode): - pass - - -# -# Generic inline with extra and max_num -# -class EpisodeMaxNum(Episode): - pass - # # Generic inline with unique_together diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py index 30513041d6..ed2411ffdf 100644 --- a/tests/generic_inline_admin/tests.py +++ b/tests/generic_inline_admin/tests.py @@ -4,17 +4,17 @@ import warnings from django.contrib import admin from django.contrib.admin.sites import AdminSite +from django.contrib.auth.models import User from django.contrib.contenttypes.admin import GenericTabularInline from django.contrib.contenttypes.forms import generic_inlineformset_factory from django.forms.formsets import DEFAULT_MAX_NUM from django.forms.models import ModelForm -from django.test import TestCase, override_settings +from django.test import TestCase, override_settings, RequestFactory from django.utils.deprecation import RemovedInDjango19Warning # local test models -from .admin import MediaInline, MediaPermanentInline -from .models import (Episode, EpisodeExtra, EpisodeMaxNum, Media, - EpisodePermanent, Category) +from .admin import MediaInline, MediaPermanentInline, site as admin_site +from .models import Episode, Media, EpisodePermanent, Category @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',), @@ -137,6 +137,7 @@ class GenericInlineAdminParametersTest(TestCase): def setUp(self): self.client.login(username='super', password='secret') + self.factory = RequestFactory() def tearDown(self): self.client.logout() @@ -166,9 +167,18 @@ class GenericInlineAdminParametersTest(TestCase): """ With extra=0, there should be one form. """ - e = self._create_object(EpisodeExtra) - response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeextra/%s/' % e.pk) - formset = response.context['inline_admin_formsets'][0].formset + class ExtraInline(GenericTabularInline): + model = Media + extra = 0 + + modeladmin = admin.ModelAdmin(Episode, admin_site) + modeladmin.inlines = [ExtraInline] + + e = self._create_object(Episode) + request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk) + request.user = User(username='super', is_superuser=True) + response = modeladmin.changeform_view(request, object_id=str(e.pk)) + formset = response.context_data['inline_admin_formsets'][0].formset self.assertEqual(formset.total_form_count(), 1) self.assertEqual(formset.initial_form_count(), 1) @@ -176,12 +186,43 @@ class GenericInlineAdminParametersTest(TestCase): """ With extra=5 and max_num=2, there should be only 2 forms. """ - e = self._create_object(EpisodeMaxNum) - response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodemaxnum/%s/' % e.pk) - formset = response.context['inline_admin_formsets'][0].formset + class MaxNumInline(GenericTabularInline): + model = Media + extra = 5 + max_num = 2 + + modeladmin = admin.ModelAdmin(Episode, admin_site) + modeladmin.inlines = [MaxNumInline] + + e = self._create_object(Episode) + request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk) + request.user = User(username='super', is_superuser=True) + response = modeladmin.changeform_view(request, object_id=str(e.pk)) + formset = response.context_data['inline_admin_formsets'][0].formset self.assertEqual(formset.total_form_count(), 2) self.assertEqual(formset.initial_form_count(), 1) + def testMinNumParam(self): + """ + With extra=3 and min_num=2, there should be six forms. + See #22628 - this will change when that's fixed. + """ + class MinNumInline(GenericTabularInline): + model = Media + extra = 3 + min_num = 2 + + modeladmin = admin.ModelAdmin(Episode, admin_site) + modeladmin.inlines = [MinNumInline] + + e = self._create_object(Episode) + request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk) + request.user = User(username='super', is_superuser=True) + response = modeladmin.changeform_view(request, object_id=str(e.pk)) + formset = response.context_data['inline_admin_formsets'][0].formset + self.assertEqual(formset.total_form_count(), 6) + self.assertEqual(formset.initial_form_count(), 1) + @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',), ROOT_URLCONF="generic_inline_admin.urls") |