Opened 4 years ago

Closed 3 years ago

Last modified 3 years ago

#32587 closed Cleanup/optimization (duplicate)

Use RelatedManager of parent object in get_queryset of inlines and support prefetching

Reported by: Andreas Galazis Owned by: nobody
Component: contrib.admin Version: 3.2
Severity: Normal Keywords: admin, prefetch, inline
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description (last modified by Andreas Galazis)

This would help support prefetching configuration on parent admin's queryset.
This is not sufficient to support prefetching since there are multiple (I have found at least 3) instances in inline admin and inline formset where self.get_queryset()[i] paradigm is used.

At least perform some code cleanup?

Even if this issue a won't fix for any reason at least abstract fetching instance by in index in a ge_instance_by_index method so that we can implement admins that do what we want of top of current base classes. If this is done then we will be able to overwrite ge_instance_by_index to return list(self.get_queryset())[i] instead of self.get_queryset()[i] on inlines that support prefetching

Also I believe that the logic about preparing queryset in BaseInlineFormSet should exist in a separate function called prepare_queryset:

def prepare_queryset(queryset):
        if queryset is None:
            queryset = self.model._default_manager
        if self.instance.pk is not None:
            qs = queryset.filter(**{self.fk.name: self.instance})
        else:
            qs = queryset.none()
        return qs

instead if throwing it __init__. Init could just call the above to get the value . This way filtering wouldn't be enforced in the case of related manager querysets since we could overwrite the method.

Change History (9)

comment:1 by Andreas Galazis, 4 years ago

Component: Uncategorizedcontrib.admin
Keywords: admin prefetch inline added

comment:2 by Andreas Galazis, 4 years ago

Type: UncategorizedCleanup/optimization

comment:3 by Andreas Galazis, 4 years ago

Description: modified (diff)
Summary: Use RelatedManager of parent object in get_queryset of inlinesUse RelatedManager of parent object in get_queryset of inlines and support prfetching

comment:4 by Andreas Galazis, 4 years ago

Description: modified (diff)

comment:5 by Andreas Galazis, 4 years ago

Description: modified (diff)

comment:6 by Andreas Galazis, 4 years ago

Summary: Use RelatedManager of parent object in get_queryset of inlines and support prfetchingUse RelatedManager of parent object in get_queryset of inlines and support prefetching

comment:7 by Andreas Galazis, 4 years ago

Description: modified (diff)

comment:8 by Mariusz Felisiak, 3 years ago

Resolution: duplicate
Status: newclosed

The non-reuse of prefetched relationship for inlines is tracked in #18597.

comment:9 by Andreas Galazis, 3 years ago

Yes but that issue doesn't mention other areas that need refactoring. Either way I will move my concerns to that issue...

Note: See TracTickets for help on using tickets.
Back to Top