summaryrefslogtreecommitdiff
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
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)
-rw-r--r--archaeological_operations/admin.py10
-rw-r--r--ishtar_common/admin.py33
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