summaryrefslogtreecommitdiff
path: root/postgresqleu/util/backendviews.py
diff options
context:
space:
mode:
authorMagnus Hagander2019-08-21 11:59:59 +0000
committerMagnus Hagander2019-08-21 14:30:12 +0000
commitaa6b6d5772c9e77f7ac43229a9f5db22bf9eb68a (patch)
tree3e1f73ab83c73d4953737ef25c2134f942e1a028 /postgresqleu/util/backendviews.py
parent8c78c13fd5ab6b90a03764c35f3d74e4d58410c0 (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.py6
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')