summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
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
commit6275ac4d3388f912a831c3f6178c3832ce9297b5 (patch)
treef5d133b3456888ccd805fdf5c50b880acab3e502 /archaeological_finds
parentd68eed24e409cf6b5c15c77fbf1034843eea9acd (diff)
downloadIshtar-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.py75
-rw-r--r--archaeological_finds/migrations/0055_auto_20190111_1755.py61
-rw-r--r--archaeological_finds/models_finds.py7
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html10
-rw-r--r--archaeological_finds/tests.py56
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()