diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-24 19:14:37 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:25 +0100 |
commit | 16a47f887447ecccd56fc848aee95fa56af92548 (patch) | |
tree | f96e518b2766d2a300829d0e5f9fac491d6d065d /archaeological_finds | |
parent | 0eab67538b8f2af9283bf1e77438763914e355b7 (diff) | |
download | Ishtar-16a47f887447ecccd56fc848aee95fa56af92548.tar.bz2 Ishtar-16a47f887447ecccd56fc848aee95fa56af92548.zip |
get_values: get containers from operation - material_types_code from finds
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/models_finds.py | 25 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 18 |
2 files changed, 43 insertions, 0 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 3924ee106..cf58952c9 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1845,12 +1845,37 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, ("base_finds.", _("List of associated base finds")), ] + def get_material_types_code(self) -> str: + """ + Return pipe separated material type code inside a container + """ + materials = set() + for material in self.material_types.exclude( + code__isnull=True).values_list("code", flat=True): + materials.add(material) + return "|".join(sorted(materials)) + + def get_material_types(self) -> str: + """ + Return comma separated string of material types inside a container + """ + materials = set() + for material in self.material_types.exclude( + label__isnull=True).values_list("label", flat=True): + materials.add(material) + return ", ".join(sorted(materials)) + def get_values(self, prefix='', no_values=False, filtr=None, **kwargs): no_base_finds = False if "no_base_finds" in kwargs: no_base_finds = kwargs["no_base_finds"] values = super(Find, self).get_values( prefix=prefix, no_values=no_values, filtr=filtr, **kwargs) + if not filtr or prefix + 'material_types' in filtr: + values[prefix + 'material_types'] = self.get_material_types() + if not filtr or prefix + 'material_types_code' in filtr: + values[prefix + 'material_types_code'] = \ + self.get_material_types_code() if no_base_finds: return values # by default attach first basefind data diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index bede89b51..afcdc713e 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -1004,6 +1004,24 @@ class FindTest(FindInit, TestCase): self.assertEqual(models.BaseFind.objects.filter( pk=self.base_finds[0].pk).count(), 0) + def test_get_material_types(self): + mat0 = models.MaterialType.objects.all()[0] + mat1 = models.MaterialType.objects.all()[1] + self.create_finds() + find0 = self.finds[0] + self.assertEqual(find0.get_material_types(), "") + self.assertEqual(find0.get_material_types_code(), "") + + find0.material_types.add(mat0) + find0.material_types.add(mat1) + + self.assertEqual( + find0.get_material_types(), + ", ".join(sorted([mat0.label, mat1.label]))) + self.assertEqual( + find0.get_material_types_code(), + "|".join(sorted([mat0.code, mat1.code]))) + class FindSearchTest(FindInit, TestCase, SearchText): fixtures = WAREHOUSE_FIXTURES |