From 2e2d42111a9fae88c174557db206fa08d3d24730 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 9 Mar 2022 12:13:49 +0100 Subject: Templates: optimize template render for containers --- archaeological_finds/models_finds.py | 22 +++++++++++++++++ archaeological_warehouse/models.py | 3 ++- docs/fr/source/annexe-tech-3-variables-gen.rst | 34 ++++++++++++++------------ docs/fr/source/annexe-tech-4-jinja-filters.rst | 22 +++++++++++------ docs/generate_values_doc.py | 11 ++++++++- ishtar_common/models.py | 4 +++ 6 files changed, 70 insertions(+), 26 deletions(-) diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index c292cd368..933f14237 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1710,6 +1710,8 @@ class Find( "alteration_causes", "cultural_attributions", ] + GET_VALUES_EXTRA = ValueGetter.GET_VALUES_EXTRA + ["complete_id", + "context_record_label"] GET_VALUES_EXTRA_TYPES = ValueGetter.GET_VALUES_EXCLUDE_FIELDS + [ "material_types", "object_types", @@ -2096,6 +2098,24 @@ class Find( lbl += " ({})".format(base) return lbl + @property + def complete_id(self): + """ + Return complete id of associated base find + """ + return " ; ".join( + list(self.base_finds.values_list("cache_complete_id", flat=True)) + ) + + @property + def context_record_label(self): + """ + Return label of associated context records + """ + return " ; ".join( + list(self.base_finds.values_list("context_record__label", flat=True)) + ) + def get_first_base_find(self): if not self.base_finds.count(): return @@ -2106,6 +2126,8 @@ class Find( ("material_types_label", _("Material types string")), ("material_types_code", _("Material types code string")), ("material_types_recommendations", _("Recommendations string from material")), + ("complete_id", _("Complete ID of associated base finds")), + ("context_record_label", _("Label of associated context records")), ] def get_material_types_code(self) -> str: diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 268a0466a..b1dc6a54f 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -1659,9 +1659,10 @@ class Container( and "finds" not in kwargs.get("exclude", []) ): kwargs["exclude"] = base_exclude[:] + kwargs["no_base_finds"] = True # prevent recursive call values[prefix + "finds"] = [ - f.get_values(prefix=prefix, no_values=True, filtr=None, **kwargs) + f.get_values(prefix=prefix, no_values=True, filtr=filtr, **kwargs) for f in self.finds.distinct().all() ] diff --git a/docs/fr/source/annexe-tech-3-variables-gen.rst b/docs/fr/source/annexe-tech-3-variables-gen.rst index 7561afff9..4e09ca4d7 100644 --- a/docs/fr/source/annexe-tech-3-variables-gen.rst +++ b/docs/fr/source/annexe-tech-3-variables-gen.rst @@ -7,9 +7,9 @@ Annexe technique 3 - Variables ============================== :Auteurs: Étienne Loks, Ishtar team -:Date: 2021-10-20 +:Date: 2022-03-09 :Copyright: CC-BY 3.0 -:Ishtar Version: v3.1.36 +:Ishtar Version: v3.1.50 ---------------------------------- @@ -301,9 +301,9 @@ Chaque opération dispose des :ref:`champs géographiques `, - **comment** : *Texte* - Commentaire - **common_name** : *Texte* - Nom générique - **complete_identifier** : *Texte* - Identifiant complet -- **containers** : Liste des contenants associés - **Field not available for imports** +- **containers** : Liste des contenants associés - **Champ non disponible pour les imports** - **context_record__** : *→ Unité d'Enregistrement (opération)* -- **context_records** : Liste des unités d'enregistrement associées - **Field not available for imports** +- **context_records** : Liste des unités d'enregistrement associées - **Champ non disponible pour les imports** - **cost** : *Entier* - Coût (euros) - **creation_date** : *Date* - Date de création - **custom_index** : *Entier* - Custom index @@ -460,7 +460,7 @@ Chaque unité d'enregistrement dispose des :ref:`champs géographiques `, - **container_tree_child__** : *→ container tree (contenant)* - **container_tree_parent__** : *→ container trees (contenant parent)* - **container_type__** : *→ Type de contenant* (**label** Dénomination, **txt_idx** Identifiant textuel) - Type de contenant -- **context_record_** : Unité d'Enregistrement associée - à utiliser avec précaution seule la première unité d'enregistrement trouvée est retournée - **Field not available for imports** +- **context_record_** : Unité d'Enregistrement associée - à utiliser avec précaution seule la première unité d'enregistrement trouvée est retournée - **Champ non disponible pour les imports** - **custom_index** : *Entier* - Custom index - **division__** : *→ Localisations de contenant (contenant)* - **documents__** : *→ Document* - Documents - **external_id** : *Texte* - Identifiant -- **finds** : Liste du mobilier associé - **Field not available for imports** +- **finds** : Liste du mobilier associé - **Champ non disponible pour les imports** - **finds__** : *→ Mobilier (contenant)* - **finds_ref__** : *→ Mobilier (contenant de référence)* - **index** : *Entier* - ID contenant - **location__** : *→ Lieu de conservation* - Lieu de conservation - **main_image__** : *→ Document* - Image principale -- **material_types** : Types de matériaux dans le contenant - chaîne de caractères - **Field not available for imports** -- **material_types_code** : Code des types de matériau - chaîne de caractères - **Field not available for imports** +- **material_types** : Types de matériaux dans le contenant - chaîne de caractères - **Champ non disponible pour les imports** +- **material_types_code** : Code des types de matériau - chaîne de caractères - **Champ non disponible pour les imports** - **old_reference** : *Texte* - Ancienne référence -- **operation_** : Opération associée - à utiliser avec précaution seule la première opération trouvée est retournée - **Field not available for imports** +- **operation_** : Opération associée - à utiliser avec précaution seule la première opération trouvée est retournée - **Champ non disponible pour les imports** - **parent__** : *→ Contenant* - Contenant parent - **qrcode** : *Image (255)* - qrcode - **reference** : *Texte* - Réf. du contenant diff --git a/docs/fr/source/annexe-tech-4-jinja-filters.rst b/docs/fr/source/annexe-tech-4-jinja-filters.rst index 6f2a13a47..9dc499312 100644 --- a/docs/fr/source/annexe-tech-4-jinja-filters.rst +++ b/docs/fr/source/annexe-tech-4-jinja-filters.rst @@ -75,16 +75,22 @@ Manipulation des chaînes de caractères Ce filtre permet d'extraire un élément depuis une chaîne de caractères en prenant en compte un séparateur. Par exemple depuis la chaîne -`2,3,10`, accéder au troisième élément : `10`. Ce filtre nécessite au minimum -un argument, le numéro de l'élément souhaité (en commençant le compte à 0) : pour -avoir le second élément, il faut indiquer en argument `1`. +`"2,3,10"`, accéder au troisième élément : `"10"`. + +Ce filtre nécessite au minimum un argument, le numéro de l'élément souhaité (en +commençant le compte à 0) : pour avoir le second élément, il faut indiquer en argument +`"1"`. + Le second argument correspond à la borne de fin non incluse (en commençant le compte à 0) : ainsi pour avoir jusqu'au deuxième élément il faut indiquer en argument -`2`. Si l'on ne souhaite avoir qu'un seul élément, on indique `0`. -Par défaut le séparateur `,` est utilisé si l'on souhaite un autre -séparateur, on spécifie celui-ci en troisème argument. On peut associer un -dernier argument qui permet de spécifier le(s) caractère(s) de concatnation que l'on -souhaite utiliser pour la chaîne en retour. +`"2"`. Si l'on ne souhaite avoir qu'un seul élément, on indique `"0"`. + +Par défaut le séparateur `","` est utilisé si l'on souhaite un autre +séparateur, on spécifie celui-ci en troisème argument. + +On peut associer un dernier argument qui permet de spécifier le(s) caractère(s) de +concaténation que l'on souhaite utiliser pour la chaîne en retour. + - `{{\"9,2,10\"|splitpart(1)}}` -> `2` - `{{\"chaise;bureau;papier;paragraphe\"|splitpart(0,0,\";\")}}` -> `chaise` diff --git a/docs/generate_values_doc.py b/docs/generate_values_doc.py index b335634eb..acff81ff8 100644 --- a/docs/generate_values_doc.py +++ b/docs/generate_values_doc.py @@ -4,6 +4,7 @@ from django.utils.translation import activate, ugettext as _ import datetime from jinja2 import Template +import locale import os @@ -64,8 +65,16 @@ MODELS = { "archaeological_warehouse": ["warehouse", "container"], } +lc = settings.LANGUAGE_CODE +lc = lc[:2] + "_" + lc[-2:].upper() + ".UTF-8" +locale.setlocale(locale.LC_ALL, lc) + +MESSAGES = { + 'value_only_message': str(_("Field not available for imports")) +} + MESSAGES = { - 'value_only_message': _("Field not available for imports") + 'value_only_message': "Champ non disponible pour les imports" } diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f483020e0..7d634a680 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -297,6 +297,10 @@ class ValueGetter(object): values[prefix + field_name] = value values.update(self._get_values_documents(prefix=prefix, filtr=filtr)) for extra_field in self.GET_VALUES_EXTRA: + if filtr and not any( + extra_field for f in filtr if f.startswith(prefix + extra_field) + ): + continue values[prefix + extra_field] = getattr(self, extra_field) or "" for key, val in values.items(): if val is None: -- cgit v1.2.3