summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Caratzas <bigjust@lambdaphil.es>2014-09-22 17:29:44 -0400
committerTim Graham <timograham@gmail.com>2014-09-24 06:32:42 -0400
commitcf43a1ee909ab5dbca5b6a40247cd093a3e2ac8d (patch)
treeb2c16996ce62f285685b2348020b3f9bed285721
parent2f3a4cd573166e6b7bac9ed89d448ca34ab93edf (diff)
Fixed #23539 -- Added get_extra(), get_max_num(), and get_min_num() hooks to GenericInlineModelAdmin.
-rw-r--r--django/contrib/contenttypes/admin.py6
-rw-r--r--docs/releases/1.7.1.txt6
-rw-r--r--tests/generic_inline_admin/tests.py57
3 files changed, 66 insertions, 3 deletions
diff --git a/django/contrib/contenttypes/admin.py b/django/contrib/contenttypes/admin.py
index 1938fa7aae..3ad4c86ee8 100644
--- a/django/contrib/contenttypes/admin.py
+++ b/django/contrib/contenttypes/admin.py
@@ -115,12 +115,12 @@ class GenericInlineModelAdmin(InlineModelAdmin):
"form": self.form,
"formfield_callback": partial(self.formfield_for_dbfield, request=request),
"formset": self.formset,
- "extra": self.extra,
+ "extra": self.get_extra(request, obj),
"can_delete": can_delete,
"can_order": False,
"fields": fields,
- "min_num": self.min_num,
- "max_num": self.max_num,
+ "min_num": self.get_min_num(request, obj),
+ "max_num": self.get_max_num(request, obj),
"exclude": exclude
}
defaults.update(kwargs)
diff --git a/docs/releases/1.7.1.txt b/docs/releases/1.7.1.txt
index aa7d7f90a0..8d8af5c7f2 100644
--- a/docs/releases/1.7.1.txt
+++ b/docs/releases/1.7.1.txt
@@ -61,3 +61,9 @@ Bugfixes
* Fixed renaming of models with a self-referential many-to-many field
(``ManyToManyField('self')``) (:ticket:`23503`).
+
+* Added the :meth:`~django.contrib.admin.InlineModelAdmin.get_extra()`,
+ :meth:`~django.contrib.admin.InlineModelAdmin.get_max_num()`, and
+ :meth:`~django.contrib.admin.InlineModelAdmin.get_min_num()` hooks to
+ :class:`~django.contrib.contenttypes.admin.GenericInlineModelAdmin`
+ (:ticket:`23539`).
diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py
index dafd5d3334..bd80ec3460 100644
--- a/tests/generic_inline_admin/tests.py
+++ b/tests/generic_inline_admin/tests.py
@@ -222,6 +222,63 @@ class GenericInlineAdminParametersTest(TestCase):
self.assertEqual(formset.total_form_count(), 5)
self.assertEqual(formset.initial_form_count(), 1)
+ def test_get_extra(self):
+
+ class GetExtraInline(GenericTabularInline):
+ model = Media
+ extra = 4
+
+ def get_extra(self, request, obj):
+ return 2
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [GetExtraInline]
+ 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.extra, 2)
+
+ def test_get_min_num(self):
+
+ class GetMinNumInline(GenericTabularInline):
+ model = Media
+ min_num = 5
+
+ def get_min_num(self, request, obj):
+ return 2
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [GetMinNumInline]
+ 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.min_num, 2)
+
+ def test_get_max_num(self):
+
+ class GetMaxNumInline(GenericTabularInline):
+ model = Media
+ extra = 5
+
+ def get_max_num(self, request, obj):
+ return 2
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [GetMaxNumInline]
+ 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.max_num, 2)
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',),
ROOT_URLCONF="generic_inline_admin.urls")