Loading django/contrib/admin/options.py +5 −1 Original line number Diff line number Diff line Loading @@ -1512,6 +1512,10 @@ class InlineModelAdmin(BaseModelAdmin): js.extend(['SelectBox.js', 'SelectFilter2.js']) return forms.Media(js=[static('admin/js/%s' % url) for url in js]) def get_extra(self, request, obj=None, **kwargs): """Hook for customizing the number of extra inline forms.""" return self.extra def get_formset(self, request, obj=None, **kwargs): """Returns a BaseInlineFormSet class for use in admin add/change views.""" if self.declared_fieldsets: Loading @@ -1538,7 +1542,7 @@ class InlineModelAdmin(BaseModelAdmin): "fields": fields, "exclude": exclude, "formfield_callback": partial(self.formfield_for_dbfield, request=request), "extra": self.extra, "extra": self.get_extra(request, obj, **kwargs), "max_num": self.max_num, "can_delete": can_delete, } Loading docs/ref/contrib/admin/index.txt +25 −0 Original line number Diff line number Diff line Loading @@ -1715,6 +1715,11 @@ The ``InlineModelAdmin`` class adds: The dynamic link will not appear if the number of currently displayed forms exceeds ``max_num``, or if the user does not have JavaScript enabled. .. versionadded:: 1.6 :meth:`InlineModelAdmin.get_extra` also allows you to customize the number of extra forms. .. _ref-contrib-admin-inline-max-num: .. attribute:: InlineModelAdmin.max_num Loading Loading @@ -1762,6 +1767,26 @@ The ``InlineModelAdmin`` class adds: Returns a ``BaseInlineFormSet`` class for use in admin add/change views. See the example for :class:`ModelAdmin.get_formsets`. .. method:: InlineModelAdmin.get_extra(self, request, obj=None, **kwargs) .. versionadded:: 1.6 Returns the number of extra inline forms to use. By default, returns the :attr:`InlineModelAdmin.extra` attribute. Override this method to programmatically determine the number of extra inline forms. For example, this may be based on the model instance (passed as the keyword argument ``obj``):: class BinaryTreeAdmin(admin.TabularInline): model = BinaryTree def get_extra(self, request, obj=None, **kwargs): extra = 2 if obj: return extra - obj.binarytree_set.count() return extra Working with a model with two or more foreign keys to the same parent model --------------------------------------------------------------------------- Loading docs/releases/1.6.txt +4 −0 Original line number Diff line number Diff line Loading @@ -292,6 +292,10 @@ Minor features :meth:`~django.db.models.query.QuerySet.select_related` can be cleared using ``select_related(None)``. * The :meth:`~django.contrib.admin.InlineModelAdmin.get_extra` method on :class:`~django.contrib.admin.InlineModelAdmin` may be overridden to customize the number of extra inline forms. Backwards incompatible changes in 1.6 ===================================== Loading tests/admin_inlines/admin.py +12 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,17 @@ class ChildModel1Inline(admin.TabularInline): class ChildModel2Inline(admin.StackedInline): model = ChildModel2 # admin for #19425 class BinaryTreeAdmin(admin.TabularInline): model = BinaryTree def get_extra(self, request, obj=None, **kwargs): extra = 2 if obj: return extra - obj.binarytree_set.count() return extra # admin for #19524 class SightingInline(admin.TabularInline): model = Sighting Loading @@ -150,4 +161,5 @@ site.register(Author, AuthorAdmin) site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline, ReadOnlyInlineInline]) site.register(ProfileCollection, inlines=[ProfileInline]) site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline]) site.register(BinaryTree, inlines=[BinaryTreeAdmin]) site.register(ExtraTerrestrial, inlines=[SightingInline]) tests/admin_inlines/models.py +6 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,12 @@ class ChildModel2(models.Model): def get_absolute_url(self): return '/child_model2/' # Models for #19425 class BinaryTree(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', null=True, blank=True) # Models for #19524 class LifeForm(models.Model): Loading Loading
django/contrib/admin/options.py +5 −1 Original line number Diff line number Diff line Loading @@ -1512,6 +1512,10 @@ class InlineModelAdmin(BaseModelAdmin): js.extend(['SelectBox.js', 'SelectFilter2.js']) return forms.Media(js=[static('admin/js/%s' % url) for url in js]) def get_extra(self, request, obj=None, **kwargs): """Hook for customizing the number of extra inline forms.""" return self.extra def get_formset(self, request, obj=None, **kwargs): """Returns a BaseInlineFormSet class for use in admin add/change views.""" if self.declared_fieldsets: Loading @@ -1538,7 +1542,7 @@ class InlineModelAdmin(BaseModelAdmin): "fields": fields, "exclude": exclude, "formfield_callback": partial(self.formfield_for_dbfield, request=request), "extra": self.extra, "extra": self.get_extra(request, obj, **kwargs), "max_num": self.max_num, "can_delete": can_delete, } Loading
docs/ref/contrib/admin/index.txt +25 −0 Original line number Diff line number Diff line Loading @@ -1715,6 +1715,11 @@ The ``InlineModelAdmin`` class adds: The dynamic link will not appear if the number of currently displayed forms exceeds ``max_num``, or if the user does not have JavaScript enabled. .. versionadded:: 1.6 :meth:`InlineModelAdmin.get_extra` also allows you to customize the number of extra forms. .. _ref-contrib-admin-inline-max-num: .. attribute:: InlineModelAdmin.max_num Loading Loading @@ -1762,6 +1767,26 @@ The ``InlineModelAdmin`` class adds: Returns a ``BaseInlineFormSet`` class for use in admin add/change views. See the example for :class:`ModelAdmin.get_formsets`. .. method:: InlineModelAdmin.get_extra(self, request, obj=None, **kwargs) .. versionadded:: 1.6 Returns the number of extra inline forms to use. By default, returns the :attr:`InlineModelAdmin.extra` attribute. Override this method to programmatically determine the number of extra inline forms. For example, this may be based on the model instance (passed as the keyword argument ``obj``):: class BinaryTreeAdmin(admin.TabularInline): model = BinaryTree def get_extra(self, request, obj=None, **kwargs): extra = 2 if obj: return extra - obj.binarytree_set.count() return extra Working with a model with two or more foreign keys to the same parent model --------------------------------------------------------------------------- Loading
docs/releases/1.6.txt +4 −0 Original line number Diff line number Diff line Loading @@ -292,6 +292,10 @@ Minor features :meth:`~django.db.models.query.QuerySet.select_related` can be cleared using ``select_related(None)``. * The :meth:`~django.contrib.admin.InlineModelAdmin.get_extra` method on :class:`~django.contrib.admin.InlineModelAdmin` may be overridden to customize the number of extra inline forms. Backwards incompatible changes in 1.6 ===================================== Loading
tests/admin_inlines/admin.py +12 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,17 @@ class ChildModel1Inline(admin.TabularInline): class ChildModel2Inline(admin.StackedInline): model = ChildModel2 # admin for #19425 class BinaryTreeAdmin(admin.TabularInline): model = BinaryTree def get_extra(self, request, obj=None, **kwargs): extra = 2 if obj: return extra - obj.binarytree_set.count() return extra # admin for #19524 class SightingInline(admin.TabularInline): model = Sighting Loading @@ -150,4 +161,5 @@ site.register(Author, AuthorAdmin) site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline, ReadOnlyInlineInline]) site.register(ProfileCollection, inlines=[ProfileInline]) site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline]) site.register(BinaryTree, inlines=[BinaryTreeAdmin]) site.register(ExtraTerrestrial, inlines=[SightingInline])
tests/admin_inlines/models.py +6 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,12 @@ class ChildModel2(models.Model): def get_absolute_url(self): return '/child_model2/' # Models for #19425 class BinaryTree(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', null=True, blank=True) # Models for #19524 class LifeForm(models.Model): Loading