mirror of https://github.com/django/django.git
[1.7.x] Fixed #23539 -- Added get_extra(), get_max_num(), and get_min_num() hooks to GenericInlineModelAdmin.
Backport of cf43a1ee90
from master
This commit is contained in:
parent
b4c9920352
commit
cc74d8e02e
|
@ -115,12 +115,12 @@ class GenericInlineModelAdmin(InlineModelAdmin):
|
||||||
"form": self.form,
|
"form": self.form,
|
||||||
"formfield_callback": partial(self.formfield_for_dbfield, request=request),
|
"formfield_callback": partial(self.formfield_for_dbfield, request=request),
|
||||||
"formset": self.formset,
|
"formset": self.formset,
|
||||||
"extra": self.extra,
|
"extra": self.get_extra(request, obj),
|
||||||
"can_delete": can_delete,
|
"can_delete": can_delete,
|
||||||
"can_order": False,
|
"can_order": False,
|
||||||
"fields": fields,
|
"fields": fields,
|
||||||
"min_num": self.min_num,
|
"min_num": self.get_min_num(request, obj),
|
||||||
"max_num": self.max_num,
|
"max_num": self.get_max_num(request, obj),
|
||||||
"exclude": exclude
|
"exclude": exclude
|
||||||
}
|
}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
|
|
|
@ -61,3 +61,9 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed renaming of models with a self-referential many-to-many field
|
* Fixed renaming of models with a self-referential many-to-many field
|
||||||
(``ManyToManyField('self')``) (:ticket:`23503`).
|
(``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`).
|
||||||
|
|
|
@ -221,6 +221,63 @@ class GenericInlineAdminParametersTest(TestCase):
|
||||||
self.assertEqual(formset.total_form_count(), 5)
|
self.assertEqual(formset.total_form_count(), 5)
|
||||||
self.assertEqual(formset.initial_form_count(), 1)
|
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',))
|
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
|
||||||
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
||||||
|
|
Loading…
Reference in New Issue