diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 19:23:51 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 19:23:51 +0100 |
commit | 6275ac4d3388f912a831c3f6178c3832ce9297b5 (patch) | |
tree | f5d133b3456888ccd805fdf5c50b880acab3e502 /archaeological_finds | |
parent | d68eed24e409cf6b5c15c77fbf1034843eea9acd (diff) | |
download | Ishtar-6275ac4d3388f912a831c3f6178c3832ce9297b5.tar.bz2 Ishtar-6275ac4d3388f912a831c3f6178c3832ce9297b5.zip |
Use JSON for M2M history
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/migrations/0055_auto_20181227_1643.py | 75 | ||||
-rw-r--r-- | archaeological_finds/migrations/0055_auto_20190111_1755.py | 61 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 7 | ||||
-rw-r--r-- | archaeological_finds/templates/ishtar/sheet_find.html | 10 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 56 |
5 files changed, 98 insertions, 111 deletions
diff --git a/archaeological_finds/migrations/0055_auto_20181227_1643.py b/archaeological_finds/migrations/0055_auto_20181227_1643.py deleted file mode 100644 index 094fbaf12..000000000 --- a/archaeological_finds/migrations/0055_auto_20181227_1643.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.10 on 2018-12-27 16:43 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('archaeological_finds', '0054_migrate_main_image'), - ] - - operations = [ - migrations.AddField( - model_name='find', - name='historical_communicabilities', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='find', - name='historical_datings', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='find', - name='historical_integrities', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='find', - name='historical_material_types', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='find', - name='historical_object_types', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='find', - name='historical_remarkabilities', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_communicabilities', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_datings', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_integrities', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_material_types', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_object_types', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='historicalfind', - name='historical_remarkabilities', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/archaeological_finds/migrations/0055_auto_20190111_1755.py b/archaeological_finds/migrations/0055_auto_20190111_1755.py new file mode 100644 index 000000000..5b9ca2558 --- /dev/null +++ b/archaeological_finds/migrations/0055_auto_20190111_1755.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2019-01-11 17:55 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0054_migrate_main_image'), + ] + + operations = [ + migrations.AddField( + model_name='basefind', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='find', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='historicalbasefind', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='historicalfind', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='historicaltreatment', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='property', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='treatment', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + migrations.AddField( + model_name='treatmentfile', + name='history_m2m', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}), + ), + ] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 9e377d1f6..803f885b4 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -21,6 +21,7 @@ import datetime from django.conf import settings from django.contrib.gis.db import models +from django.contrib.postgres.fields import JSONField from django.core.urlresolvers import reverse from django.db import connection from django.db.models import Max, Q, F @@ -1074,7 +1075,6 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms, MaterialType, verbose_name=_(u"Material types"), related_name='finds', blank=True ) - historical_material_types = models.TextField(blank=True, null=True) material_type_quality = models.ForeignKey( MaterialTypeQualityType, verbose_name=_(u"Material type quality"), related_name='finds', @@ -1094,7 +1094,6 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms, verbose_name=_(u"Downstream treatment"), on_delete=models.SET_NULL) datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"), related_name='find') - historical_datings = models.TextField(blank=True, null=True) container = models.ForeignKey( "archaeological_warehouse.Container", verbose_name=_(u"Container"), blank=True, null=True, @@ -1110,7 +1109,6 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms, ObjectType, verbose_name=_(u"Object types"), related_name='find', blank=True ) - historical_object_types = models.TextField(blank=True, null=True) object_type_quality = models.ForeignKey( ObjectTypeQualityType, verbose_name=_(u"Object type quality"), related_name='finds', @@ -1119,15 +1117,12 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, OwnPerms, integrities = models.ManyToManyField( IntegrityType, verbose_name=_(u"Integrity / interest"), related_name='find', blank=True) - historical_integrities = models.TextField(blank=True, null=True) remarkabilities = models.ManyToManyField( RemarkabilityType, verbose_name=_(u"Remarkability"), related_name='find', blank=True) - historical_remarkabilities = models.TextField(blank=True, null=True) communicabilities = models.ManyToManyField( CommunicabilityType, verbose_name=_(u"Communicability"), related_name='find', blank=True) - historical_communicabilities = models.TextField(blank=True, null=True) min_number_of_individuals = models.IntegerField( _(u"Minimum number of individuals (MNI)"), blank=True, null=True) length = models.FloatField(_(u"Length (cm)"), blank=True, null=True) diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html index ac2df607d..a7302d16a 100644 --- a/archaeological_finds/templates/ishtar/sheet_find.html +++ b/archaeological_finds/templates/ishtar/sheet_find.html @@ -19,7 +19,9 @@ {% with permission_view_document=permission_view_document %} {% with permission_view_own_document=permission_view_own_document %} -{% with display_datings=item.integrities.count|or_:item.remarkabilities.count|or_:item.conservatory_state|or_:item.conservatory_comment|or_:item.alterations.count|or_:item.alteration_causes.count|or_:item.preservation_to_considers.count|or_:item.appraisal_date|or_:item.treatment_emergency|or_:item.insurance_value|or_:item.estimated_value|or_:item.historical_datings|or_:item.datings.count|or_:item.dating_comment %} +{% with m2m_listing_datings=item|m2m_listing:'datings' %} + +{% with display_datings=item.integrities.count|or_:item.remarkabilities.count|or_:item.conservatory_state|or_:item.conservatory_comment|or_:item.alterations.count|or_:item.alteration_causes.count|or_:item.preservation_to_considers.count|or_:item.appraisal_date|or_:item.treatment_emergency|or_:item.insurance_value|or_:item.estimated_value|or_:m2m_listing_datings|or_:item.dating_comment %} {% with display_warehouse_treatments=item.container|or_:item.container_ref|or_:item.upstream_treatment|or_:item.downstream_treatment|or_:item.treatments.count %} {% with can_view_documents=permission_view_own_document|or_:permission_view_document %} {% with display_documents=can_view_documents|and_:item.documents.count %} @@ -200,7 +202,7 @@ </div> {% endif %} - {% if item.historical_datings or item.datings.count or item.dating_comment %} + {% if m2m_listing_datings or item.dating_comment %} <h3>{% trans "Dating" %}</h3> <table id='{{window_id}}-datings' class="table table-striped"> <tr> @@ -211,7 +213,7 @@ <th>{% trans "Quality" %}</th> <th>{% trans "Precise dating" %}</th> </tr> - {% for dating in item|m2m_listing:'datings' %} + {% for dating in m2m_listing_datings %} <tr> <td> {{dating.period}} @@ -393,7 +395,7 @@ {% endif %} </div> -{% endwith %}{% endwith %}{% endwith %}{% endwith %}{% endwith %}{% endwith %} +{% endwith %}{% endwith %}{% endwith %}{% endwith %}{% endwith %}{% endwith %}{% endwith %} {% endblock %} diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 231ac30ad..2f485f36e 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -36,7 +36,6 @@ from archaeological_finds import models, views from archaeological_warehouse.models import Warehouse, WarehouseType from ishtar_common import forms_common -from ishtar_common.utils import HISTORY_M2M_SPLIT from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ TestCase, create_user, create_superuser @@ -837,26 +836,27 @@ class FindHistoryTest(FindInit, TestCase): "quality": DatingQuality.objects.get(txt_idx='sure'), "precise_dating": u"Blah !!!" } - d1_txt = Dating.SEP.join([ - (d1_attrs[k].txt_idx - if hasattr(d1_attrs[k], 'txt_idx') else unicode(d1_attrs[k])) - if k in d1_attrs else '' - for k in Dating.HISTORY_ATTR - ]) d1 = Dating.objects.create(**d1_attrs) d2_attrs = { "period": Period.objects.get(txt_idx='paleolithic'), } - d2_txt = Dating.SEP.join([ - (d2_attrs[k].txt_idx - if hasattr(d2_attrs[k], 'txt_idx') else unicode(d2_attrs[k])) - if k in d2_attrs else '' - for k in Dating.HISTORY_ATTR - ]) d2 = Dating.objects.create(**d2_attrs) + + d1_dct, d2_dct = {}, {} + for k in Dating.HISTORY_ATTR: + for dct, attr in ((d1_dct, d1_attrs) , + (d2_dct, d2_attrs)): + if k in attr: + if hasattr(attr[k], 'txt_idx'): + dct[k] = attr[k].txt_idx + else: + dct[k] = unicode(attr[k]) + else: + dct[k] = '' + find.datings.add(d1) find.datings.add(d2) - return d1_txt, d2_txt + return d1_dct, d2_dct def test_m2m_history_save(self): find = self.finds[0] @@ -874,16 +874,20 @@ class FindHistoryTest(FindInit, TestCase): find.material_types.add(ceram) find.material_types.add(glass) d1_txt, d2_txt = self._add_datings(find) + + self.assertIsNotNone(find.history_m2m) + self.assertIn('material_types', find.history_m2m) self.assertIn( - find.historical_material_types, - [HISTORY_M2M_SPLIT.join(['ceramic', 'glass']), # order do not - HISTORY_M2M_SPLIT.join(['glass', 'ceramic'])]) # matter + find.history_m2m['material_types'], + [['ceramic', 'glass'], # order do not + ['glass', 'ceramic']]) # matter + self.assertIn('datings', find.history_m2m) self.assertIn( - find.historical_datings, - [HISTORY_M2M_SPLIT.join([d1_txt, d2_txt]), # order do not - HISTORY_M2M_SPLIT.join([d2_txt, d1_txt])]) # matter + find.history_m2m['datings'], + [[d1_txt, d2_txt], # order do not + [d2_txt, d1_txt]]) # matter - historical_material_types = find.historical_material_types + historical_material_types = find.history_m2m['material_types'] find = models.Find.objects.get(pk=find.pk) find.label = "hop hop hop2" @@ -896,13 +900,13 @@ class FindHistoryTest(FindInit, TestCase): find.datings.clear() find = models.Find.objects.get(pk=find.pk) - self.assertEqual(find.historical_material_types, 'glass') - self.assertEqual(find.historical_datings, "") + self.assertEqual(find.history_m2m['material_types'], ['glass']) + self.assertEqual(find.history_m2m['datings'], []) self.assertEqual(find.history.count(), nb_hist + 2) - self.assertEqual(find.history.all()[1].historical_material_types, + self.assertEqual(find.history.all()[1].history_m2m['material_types'], historical_material_types) - self.assertEqual(find.history.all()[0].historical_material_types, - "glass") + self.assertEqual(find.history.all()[0].history_m2m['material_types'], + ["glass"]) def test_m2m_history_display(self): c = Client() |