diff options
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 |
commit | e6f2a8071106a83816e4128df93762246668238d (patch) | |
tree | 32c3e3528ae7fd1dad33bfa55262ad63a972823e | |
parent | 297e0dc40c0af07a71badcbc34dba68cbc5de37e (diff) | |
download | Ishtar-e6f2a8071106a83816e4128df93762246668238d.tar.bz2 Ishtar-e6f2a8071106a83816e4128df93762246668238d.zip |
⚡️ admin: fix performance for administrative act form - automatic improve layout (put generic fields at the end)
-rw-r--r-- | archaeological_operations/admin.py | 10 | ||||
-rw-r--r-- | ishtar_common/admin.py | 33 |
2 files changed, 37 insertions, 6 deletions
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 39c5ba490..40d275d83 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -22,7 +22,7 @@ from django.contrib import admin from ishtar_common.apps import admin_site from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, \ - MergeActionAdmin, MainGeoDataItem + MergeActionAdmin, MainGeoDataItem, MAIN_ITEM_READONLY_FIELDS from . import models @@ -32,11 +32,12 @@ class AdministrativeActAdmin(HistorizedObjectAdmin): 'act_type') list_filter = ('act_type',) search_fields = ('year', 'index') - readonly_fields = HistorizedObjectAdmin.readonly_fields + [ + readonly_fields = MAIN_ITEM_READONLY_FIELDS + [ 'in_charge', 'operator', 'scientist', 'signatory', 'associated_file', 'departments_label', 'towns_label'] model = models.AdministrativeAct - autocomplete_fields = ("operation",) + autocomplete_fields = ("operation", "treatment", "treatment_file") + exclude = ["documents", "main_image"] admin_site.register(models.AdministrativeAct, AdministrativeActAdmin) @@ -66,6 +67,7 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin, MainGeoDataItem): autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + \ MainGeoDataItem.autocomplete_fields + ["towns"] exclude = ["documents", "main_image"] + readonly_fields = MAIN_ITEM_READONLY_FIELDS admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin) @@ -86,7 +88,7 @@ class OperationAdmin(HistorizedObjectAdmin, MainGeoDataItem): list_display.insert(2, 'code_patriarche') search_fields += ['code_patriarche'] model = models.Operation - readonly_fields = HistorizedObjectAdmin.readonly_fields + [ + readonly_fields = MAIN_ITEM_READONLY_FIELDS + [ 'cached_label', 'top_sites'] autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + \ MainGeoDataItem.autocomplete_fields + [ 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 |