diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-04-22 15:16:08 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-04-23 11:19:15 +0200 |
commit | f6607acad89198b7b33df4c99041af84c9fe9d69 (patch) | |
tree | f27677df294f46df387ec452cc12e751d33c8ce7 | |
parent | 2c539d0c805f59fea30546740e9fafbae94d132a (diff) | |
download | Ishtar-f6607acad89198b7b33df4c99041af84c9fe9d69.tar.bz2 Ishtar-f6607acad89198b7b33df4c99041af84c9fe9d69.zip |
🐛 fix table export with json fields in search (refs #6292)
-rw-r--r-- | archaeological_context_records/models.py | 2 | ||||
-rw-r--r-- | archaeological_files/models.py | 2 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 2 | ||||
-rw-r--r-- | archaeological_finds/models_treatments.py | 5 | ||||
-rw-r--r-- | archaeological_operations/models.py | 7 | ||||
-rw-r--r-- | archaeological_warehouse/models.py | 6 | ||||
-rw-r--r-- | ishtar_common/models.py | 8 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 12 | ||||
-rw-r--r-- | ishtar_common/views.py | 3 |
9 files changed, 46 insertions, 1 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 30d2d9ad7..cfa9b2b52 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -748,6 +748,8 @@ class ContextRecord( ALT_NAMES.update(GeoItem.ALT_NAMES) ALT_NAMES.update(Imported.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_context_records.forms", "RecordSelect") + BASE_SEARCH_VECTORS = [ SearchVectorConfig("label", "raw"), SearchVectorConfig("location"), diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 5a5f4947e..1aeb191cf 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -618,6 +618,8 @@ class File( ALT_NAMES.update(DocumentItem.ALT_NAMES) ALT_NAMES.update(Imported.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_files.forms", "FileSelect") + POST_PROCESS_REQUEST = { "towns__numero_insee__startswith": "_get_department_code", } diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index d10494483..4ec0742dd 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1832,6 +1832,8 @@ class Find( ALT_NAMES.update(GeoItem.ALT_NAMES_FOR_FIND()) ALT_NAMES.update(Imported.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_finds.forms", "FindSelect") + """ # kept as an example DYNAMIC_REQUESTS = { diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index 69a8b899c..c332a6aa3 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -296,6 +296,9 @@ class Treatment( } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) ALT_NAMES.update(DocumentItem.ALT_NAMES) + + DEFAULT_SEARCH_FORM = ("archaeological_finds.forms_treatments", "TreatmentSelect") + HISTORICAL_M2M = [ "treatment_types", ] @@ -1351,6 +1354,8 @@ class TreatmentFile( ALT_NAMES.update(DocumentItem.ALT_NAMES) SHEET_EMPTY_KEYS = ["name"] + DEFAULT_SEARCH_FORM = ("archaeological_finds.forms_treatments", "TreatmentFileSelect") + # fields year = models.IntegerField(_("Year"), default=get_current_year) index = models.IntegerField(_("Index"), default=1) diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index fe6ed584e..63ad61c76 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -560,6 +560,8 @@ class ArchaeologicalSite( ALT_NAMES.update(GeoItem.ALT_NAMES) ALT_NAMES.update(Imported.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_operations.forms", "SiteSelect") + UP_MODEL_QUERY = { "operation": ( pgettext_lazy("key for text search", "operation"), @@ -1489,6 +1491,8 @@ class Operation( ALT_NAMES.update(GeoItem.ALT_NAMES) ALT_NAMES.update(Imported.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_operations.forms", "OperationSelect") + QA_EDIT = QuickAction( url="operation-qa-bulk-update", icon_class="fa fa-pencil", @@ -3100,6 +3104,9 @@ class AdministrativeAct(DocumentItem, BaseHistorizedItem, OwnPerms, ValueGetter, ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) ALT_NAMES.update(DocumentItem.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("archaeological_operations.forms", + "AdministrativeActOpeSelect") + UP_MODEL_QUERY = {} POST_PROCESS_REQUEST = { diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 943d8e49c..2c6feaffc 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -335,6 +335,9 @@ class Warehouse( ), } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) + + DEFAULT_SEARCH_FORM = ("archaeological_warehouse.forms", "WarehouseSelect") + GEO_LABEL = "name" CACHED_LABELS = ["cached_town_label"] @@ -1070,6 +1073,9 @@ class Container( "location__precise_town__areas__label__iexact" ), } + + DEFAULT_SEARCH_FORM = ("archaeological_warehouse.forms", "ContainerSelect") + REVERSED_BOOL_FIELDS = [ "children__isnull", "documents__image__isnull", diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 9197d4839..3a3fd70c1 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2715,6 +2715,9 @@ class Organization(Address, Merge, OwnPerms, BaseGenderedType, ValueGetter, Main ), } ALT_NAMES.update(Address.ALT_NAMES) + + DEFAULT_SEARCH_FORM = ("ishtar_common.forms_common", "OrganizationSelect") + QA_EDIT = QuickAction( url="organization-qa-bulk-update", icon_class="fa fa-pencil", @@ -2996,6 +2999,9 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem): ), } ALT_NAMES.update(Address.ALT_NAMES) + + DEFAULT_SEARCH_FORM = ("ishtar_common.forms_common", "PersonSelect") + QA_EDIT = QuickAction( url="person-qa-bulk-update", icon_class="fa fa-pencil", @@ -4998,6 +5004,8 @@ class Document( } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) + DEFAULT_SEARCH_FORM = ("ishtar_common.forms_common", "DocumentSelect") + # search parameters REVERSED_BOOL_FIELDS = ["image__isnull", "associated_file__isnull"] DATED_FIELDS = BaseHistorizedItem.DATED_FIELDS + [ diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 96eb26bbf..334eb8b75 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -9,6 +9,7 @@ import copy from collections import OrderedDict import datetime import fiona +from importlib import import_module import json import logging import os @@ -957,11 +958,22 @@ class FullSearch(models.Model): PARENT_SEARCH_VECTORS = [] # prevent circular dependency PARENT_ONLY_SEARCH_VECTORS = [] + # tuple (module, class) in text for dynamic import + DEFAULT_SEARCH_FORM = tuple() class Meta: abstract = True @classmethod + def get_default_search_form(cls): + # DEFAULT_SEARCH_FORM is used to get the form when exporting tables + if not cls.DEFAULT_SEARCH_FORM: + return + form = getattr(import_module(cls.DEFAULT_SEARCH_FORM[0]), + cls.DEFAULT_SEARCH_FORM[1]) + return form + + @classmethod def general_types(cls): for k in get_all_field_names(cls): field = cls._meta.get_field(k) diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 92ae42f46..71076e52d 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1628,7 +1628,8 @@ class GenerateLabelView(GenerateView): def get_items(self, request, model): # rights are managed by get_item - get_list = get_item(model, None, model.SLUG, own_table_cols=["id"])( + get_list = get_item(model, None, model.SLUG, own_table_cols=["id"], + search_form=model.get_default_search_form())( request, no_link=True, no_limit=True ) item_list = json.loads(get_list.content.decode("utf-8"))["rows"] |