From e6f2a8071106a83816e4128df93762246668238d Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 11 Sep 2024 15:55:16 +0200 Subject: ⚡️ admin: fix performance for administrative act form - automatic improve layout (put generic fields at the end) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/admin.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'ishtar_common/admin.py') 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 -- cgit v1.2.3