summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-11 15:55:16 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-11 15:55:16 +0200
commite6f2a8071106a83816e4128df93762246668238d (patch)
tree32c3e3528ae7fd1dad33bfa55262ad63a972823e /ishtar_common/admin.py
parent297e0dc40c0af07a71badcbc34dba68cbc5de37e (diff)
downloadIshtar-e6f2a8071106a83816e4128df93762246668238d.tar.bz2
Ishtar-e6f2a8071106a83816e4128df93762246668238d.zip
⚡️ admin: fix performance for administrative act form - automatic improve layout (put generic fields at the end)
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py33
1 files changed, 31 insertions, 2 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 44ca43ec2..76b52460c 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -461,13 +461,42 @@ class ImportedObjectAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
fields = tuple(super().get_readonly_fields(request, obj) or [])
if obj: # editing an existing object
- return fields + tuple(["imports"])
+ return fields + ("imports", "imports_updated")
return fields
def get_exclude(self, request, obj=None):
fields = tuple(super().get_exclude(request, obj) or [])
if not obj:
- return fields + tuple(["imports"])
+ return fields + ("imports", "imports_updated")
+ return fields
+
+ END_FIELDS = ["data", "last_modified", "created", "need_update", "locked", "lock_user",
+ "main_geodata", "geodata", "qrcode"]
+
+ def get_fields(self, request, obj=None, **kwargs):
+ """
+ Put END_FIELDS at the end but before readonly fields
+ """
+ if self.fields:
+ return self.fields
+ fields = super().get_fields(request, **kwargs)
+ readonly_fields = self.get_readonly_fields(request, obj)
+ if readonly_fields:
+ idx_ro = fields.index(readonly_fields[0])
+ else:
+ idx_ro = len(fields) - 1
+ for end_field in self.END_FIELDS:
+ try:
+ idx_field = fields.index(end_field)
+ except ValueError:
+ continue
+ fields.insert(idx_ro, end_field)
+ fields.pop(idx_field)
+ for k in fields[:]:
+ if k.startswith("cached_"):
+ idx_field = fields.index(k)
+ fields.insert(idx_ro, k)
+ fields.pop(idx_field)
return fields