Commit c2e19e26 authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Fixed #17856 -- Passed obj to get_inline_instances

Thanks ybon, quinode and sjaensch for the patch, and Tim Graham
for the review.
parent dcbf08cc
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -346,14 +346,14 @@ class ModelAdmin(BaseModelAdmin):
        self.admin_site = admin_site
        super(ModelAdmin, self).__init__()

    def get_inline_instances(self, request):
    def get_inline_instances(self, request, obj=None):
        inline_instances = []
        for inline_class in self.inlines:
            inline = inline_class(self.model, self.admin_site)
            if request:
                if not (inline.has_add_permission(request) or
                        inline.has_change_permission(request) or
                        inline.has_delete_permission(request)):
                        inline.has_change_permission(request, obj) or
                        inline.has_delete_permission(request, obj)):
                    continue
                if not inline.has_add_permission(request):
                    inline.max_num = 0
@@ -506,7 +506,7 @@ class ModelAdmin(BaseModelAdmin):
            fields=self.list_editable, **defaults)

    def get_formsets(self, request, obj=None):
        for inline in self.get_inline_instances(request):
        for inline in self.get_inline_instances(request, obj):
            yield inline.get_formset(request, obj)

    def get_paginator(self, request, queryset, per_page, orphans=0, allow_empty_first_page=True):
@@ -994,7 +994,7 @@ class ModelAdmin(BaseModelAdmin):

        ModelForm = self.get_form(request)
        formsets = []
        inline_instances = self.get_inline_instances(request)
        inline_instances = self.get_inline_instances(request, None)
        if request.method == 'POST':
            form = ModelForm(request.POST, request.FILES)
            if form.is_valid():
@@ -1091,7 +1091,7 @@ class ModelAdmin(BaseModelAdmin):

        ModelForm = self.get_form(request, obj)
        formsets = []
        inline_instances = self.get_inline_instances(request)
        inline_instances = self.get_inline_instances(request, obj)
        if request.method == 'POST':
            form = ModelForm(request.POST, request.FILES, instance=obj)
            if form.is_valid():
+10 −0
Original line number Diff line number Diff line
@@ -1046,6 +1046,16 @@ templates used by the :class:`ModelAdmin` views:
    changelist that will be linked to the change view, as described in the
    :attr:`ModelAdmin.list_display_links` section.

.. method:: ModelAdmin.get_inline_instances(self, request, obj=None)

    .. versionadded:: 1.5

    The ``get_inline_instances`` method is given the ``HttpRequest`` and the
    ``obj`` being edited (or ``None`` on an add form) and is expected to return
    a ``list`` or ``tuple`` of :class:`~django.contrib.admin.InlineModelAdmin`
    objects, as described below in the :class:`~django.contrib.admin.InlineModelAdmin`
    section.

.. method:: ModelAdmin.get_urls(self)

    The ``get_urls`` method on a ``ModelAdmin`` returns the URLs to be used for