diff options
author | Magnus Hagander | 2019-08-21 11:59:59 +0000 |
---|---|---|
committer | Magnus Hagander | 2019-08-21 14:30:12 +0000 |
commit | aa6b6d5772c9e77f7ac43229a9f5db22bf9eb68a (patch) | |
tree | 3e1f73ab83c73d4953737ef25c2134f942e1a028 /postgresqleu/util/backendviews.py | |
parent | 8c78c13fd5ab6b90a03764c35f3d74e4d58410c0 (diff) |
Make the backend list editor more efficient wrt fields being loaded
Only load the fields from models that are actually needed. This can in
particular be efficient when loading models with large text or image
fields.
Also make it possible for a backend form to specify which related
objects to select with a join instead of a loop.
Diffstat (limited to 'postgresqleu/util/backendviews.py')
-rw-r--r-- | postgresqleu/util/backendviews.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/postgresqleu/util/backendviews.py b/postgresqleu/util/backendviews.py index 87f04e5e..3227b060 100644 --- a/postgresqleu/util/backendviews.py +++ b/postgresqleu/util/backendviews.py @@ -221,6 +221,12 @@ def backend_list_editor(request, urlname, formclass, resturl, allow_new=True, al if formclass.list_order_by: objects = objects.order_by(*formclass.list_order_by) + if formclass.queryset_select_related: + objects = objects.select_related(*formclass.queryset_select_related) + if formclass.queryset_extra_fields: + objects = objects.extra(select=formclass.queryset_extra_fields) + objects = objects.only(*(formclass.list_fields - formclass.queryset_extra_fields.keys())) + if request.method == "POST": if request.POST.get('operation') == 'assign': what = request.POST.get('what') |