summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-10-20 18:25:32 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-10-20 18:25:32 +0200
commit847532c9a353a50dc97917275bfa55f7df2308d4 (patch)
treee97fc00f6b890370c1352ba7c2285d5822812581 /archaeological_finds
parent9a9ee1dff9ccf737601072593f51ee5f6765f61a (diff)
downloadIshtar-847532c9a353a50dc97917275bfa55f7df2308d4.tar.bz2
Ishtar-847532c9a353a50dc97917275bfa55f7df2308d4.zip
Finds: "material_types_recommendations" string for templates - manage hierarchy
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/models_finds.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index f91269456..c292cd368 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -2135,11 +2135,20 @@ class Find(
Return comma separated string of recommendations from material
"""
recommendations = set()
- for recommendation in self.material_types.exclude(
- recommendation__isnull=True).exclude(
- recommendation="").values_list("recommendation", flat=True
- ):
- recommendations.add(recommendation)
+ for level in range(5):
+ excludes = [
+ ("parent__" * level + "recommendation__isnull", True),
+ ("parent__" * level + "recommendation", ""),
+ ]
+ q = self.material_types
+ if level:
+ q = q.exclude(**{("parent__" * level)[:-2] + "_id": None})
+ for k, v in excludes:
+ q = q.exclude(**{k: v})
+
+ for recommendation in q.values_list(
+ "parent__" * level + "recommendation", flat=True):
+ recommendations.add(recommendation)
return ", ".join(sorted(recommendations))
def get_values(self, prefix="", no_values=False, filtr=None, **kwargs):