summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-04-23 18:40:47 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:43:58 +0200
commit8279d1c668a54868e7195d20eb39d1ce4c5a1c06 (patch)
treec595e4556ff333b80c51e161d6c539d9775cec94
parent349466995516bc0b5eb72f333693ac8dfb5146f2 (diff)
downloadIshtar-8279d1c668a54868e7195d20eb39d1ce4c5a1c06.tar.bz2
Ishtar-8279d1c668a54868e7195d20eb39d1ce4c5a1c06.zip
Images: add a main_image field (refs #4076) - Add images associated to warehouses (refs #3879)
-rw-r--r--archaeological_context_records/migrations/0020_auto_20180423_1838.py39
-rw-r--r--archaeological_context_records/models.py8
-rw-r--r--archaeological_finds/migrations/0024_auto_20180423_1838.py53
-rw-r--r--archaeological_finds/models_finds.py9
-rw-r--r--archaeological_finds/models_treatments.py9
-rw-r--r--archaeological_operations/migrations/0026_auto_20180423_1838.py49
-rw-r--r--archaeological_operations/models.py16
-rw-r--r--archaeological_warehouse/migrations/0017_auto_20180423_1838.py31
-rw-r--r--archaeological_warehouse/models.py10
-rw-r--r--ishtar_common/migrations/0048_auto_20180423_1838.py26
10 files changed, 245 insertions, 5 deletions
diff --git a/archaeological_context_records/migrations/0020_auto_20180423_1838.py b/archaeological_context_records/migrations/0020_auto_20180423_1838.py
new file mode 100644
index 000000000..fb0c7463f
--- /dev/null
+++ b/archaeological_context_records/migrations/0020_auto_20180423_1838.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-23 18:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0048_auto_20180423_1838'),
+ ('archaeological_context_records', '0019_auto_20180403_1120'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ContextRecordImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ],
+ ),
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_context_records.ContextRecordImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ migrations.AddField(
+ model_name='contextrecordimage',
+ name='context_record',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_context_records.ContextRecord'),
+ ),
+ migrations.AddField(
+ model_name='contextrecordimage',
+ name='image',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage'),
+ ),
+ ]
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index f6253bf68..bdb21ea39 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -325,7 +325,7 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem,
point = models.PointField(_(u"Point (3D)"), blank=True, null=True, dim=3)
polygon = models.PolygonField(_(u"Polygon"), blank=True, null=True)
images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
- blank=True)
+ blank=True, through='ContextRecordImage')
cached_label = models.TextField(_(u"Cached name"), null=True, blank=True,
db_index=True)
PARENT_SEARCH_VECTORS = ['operation']
@@ -565,6 +565,12 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem,
post_save.connect(cached_label_changed, sender=ContextRecord)
+class ContextRecordImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ context_record = models.ForeignKey(ContextRecord, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
class RelationType(GeneralRelationType):
class Meta:
verbose_name = _(u"Relation type")
diff --git a/archaeological_finds/migrations/0024_auto_20180423_1838.py b/archaeological_finds/migrations/0024_auto_20180423_1838.py
new file mode 100644
index 000000000..58cf42880
--- /dev/null
+++ b/archaeological_finds/migrations/0024_auto_20180423_1838.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-23 18:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0048_auto_20180423_1838'),
+ ('archaeological_finds', '0023_auto_20180413_1637'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='FindImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='TreatmentImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
+ ],
+ ),
+ migrations.AlterField(
+ model_name='find',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_finds.FindImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ migrations.AlterField(
+ model_name='treatment',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_finds.TreatmentImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ migrations.AddField(
+ model_name='treatmentimage',
+ name='treatment',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.Treatment'),
+ ),
+ migrations.AddField(
+ model_name='findimage',
+ name='treatment',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.Find'),
+ ),
+ ]
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 40059faa6..94a8ccedc 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -829,7 +829,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
appraisal_date = models.DateField(_(u"Appraisal date"), blank=True,
null=True)
images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
- blank=True)
+ blank=True, through='FindImage')
cached_label = models.TextField(_(u"Cached name"), null=True, blank=True,
db_index=True)
history = HistoricalRecords()
@@ -1429,9 +1429,16 @@ def base_find_find_changed(sender, **kwargs):
# recalculate complete id and external id
obj.save()
+
m2m_changed.connect(base_find_find_changed, sender=Find.base_finds.through)
+class FindImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ treatment = models.ForeignKey(Find, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
class FindSource(Source):
SHOW_URL = 'show-findsource'
MODIFY_URL = 'find_source_modify'
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index b35912fd0..f96a0febf 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -125,7 +125,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
target_is_basket = models.BooleanField(_(u"Target a basket"),
default=False)
images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
- blank=True)
+ blank=True, through='TreatmentImage')
cached_label = models.TextField(_(u"Cached name"), null=True, blank=True,
db_index=True)
history = HistoricalRecords()
@@ -307,6 +307,12 @@ def pre_delete_treatment(sender, **kwargs):
pre_delete.connect(pre_delete_treatment, sender=Treatment)
+class TreatmentImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ treatment = models.ForeignKey(Treatment, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
class AbsFindTreatments(models.Model):
find = models.ForeignKey(Find, verbose_name=_(u"Find"),
related_name='%(class)s_related')
@@ -602,6 +608,7 @@ class TreatmentFile(DashboardFormItem, ClosedItem, BaseHistorizedItem,
self.pre_save()
super(TreatmentFile, self).save(*args, **kwargs)
+
post_save.connect(cached_label_changed, sender=TreatmentFile)
diff --git a/archaeological_operations/migrations/0026_auto_20180423_1838.py b/archaeological_operations/migrations/0026_auto_20180423_1838.py
new file mode 100644
index 000000000..c512a54f0
--- /dev/null
+++ b/archaeological_operations/migrations/0026_auto_20180423_1838.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-23 18:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0048_auto_20180423_1838'),
+ ('archaeological_operations', '0025_auto_20180413_1604'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='OperationImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='SiteImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
+ ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.ArchaeologicalSite')),
+ ],
+ ),
+ migrations.AlterField(
+ model_name='operation',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_operations.OperationImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ migrations.AddField(
+ model_name='operationimage',
+ name='operation',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.Operation'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_operations.SiteImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ ]
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 2a5f1cbe6..10a281dda 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -130,6 +130,8 @@ class ArchaeologicalSite(BaseHistorizedItem):
_(u"Sinking date"), null=True, blank=True)
discovery_area = models.TextField(
_(u"Discovery area"), null=True, blank=True)
+ images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
+ through='SiteImage', blank=True)
class Meta:
verbose_name = _(u"Archaeological site")
@@ -218,6 +220,12 @@ class ArchaeologicalSite(BaseHistorizedItem):
)
+class SiteImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ site = models.ForeignKey(ArchaeologicalSite, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
def get_values_town_related(item, prefix, values):
values[prefix + 'parcellist'] = item.render_parcels()
values[prefix + 'towns'] = ''
@@ -453,7 +461,7 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
scientific_documentation_comment = models.TextField(
_(u"Comment about scientific documentation"), null=True, blank=True)
images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
- blank=True)
+ blank=True, through='OperationImage')
cached_label = models.CharField(_(u"Cached name"), max_length=500,
null=True, blank=True, db_index=True)
archaeological_sites = models.ManyToManyField(
@@ -971,6 +979,12 @@ def operation_post_save(sender, **kwargs):
post_save.connect(operation_post_save, sender=Operation)
+class OperationImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ operation = models.ForeignKey(Operation, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
class RelationType(GeneralRelationType):
class Meta:
diff --git a/archaeological_warehouse/migrations/0017_auto_20180423_1838.py b/archaeological_warehouse/migrations/0017_auto_20180423_1838.py
new file mode 100644
index 000000000..fe183c312
--- /dev/null
+++ b/archaeological_warehouse/migrations/0017_auto_20180423_1838.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-23 18:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0048_auto_20180423_1838'),
+ ('archaeological_warehouse', '0016_auto_20180403_1120'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='WarehouseImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_main', models.BooleanField(default=False, verbose_name='Main image')),
+ ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
+ ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.Warehouse')),
+ ],
+ ),
+ migrations.AddField(
+ model_name='warehouse',
+ name='images',
+ field=models.ManyToManyField(blank=True, through='archaeological_warehouse.WarehouseImage', to='ishtar_common.IshtarImage', verbose_name='Images'),
+ ),
+ ]
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 035fc0c74..a860497e0 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -31,7 +31,7 @@ from ishtar_common.utils import cached_label_changed
from ishtar_common.models import GeneralType, get_external_id, \
LightHistorizedItem, OwnPerms, Address, Person, post_save_cache, \
- ImageModel, DashboardFormItem
+ ImageModel, DashboardFormItem, IshtarImage
class WarehouseType(GeneralType):
@@ -58,6 +58,8 @@ class Warehouse(Address, DashboardFormItem, OwnPerms):
'WarehouseDivision', verbose_name=_("Divisions"), blank=True,
through='WarehouseDivisionLink'
)
+ images = models.ManyToManyField(IshtarImage, verbose_name=_(u"Images"),
+ through='WarehouseImage', blank=True)
external_id = models.TextField(_(u"External ID"), blank=True, null=True)
auto_external_id = models.BooleanField(
_(u"External ID is set automatically"), default=False)
@@ -202,6 +204,12 @@ class Warehouse(Address, DashboardFormItem, OwnPerms):
return
+class WarehouseImage(models.Model):
+ image = models.ForeignKey(IshtarImage, on_delete=models.CASCADE)
+ warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+
class Collection(LightHistorizedItem):
name = models.CharField(_(u"Name"), max_length=200,
null=True, blank=True)
diff --git a/ishtar_common/migrations/0048_auto_20180423_1838.py b/ishtar_common/migrations/0048_auto_20180423_1838.py
new file mode 100644
index 000000000..840c0877a
--- /dev/null
+++ b/ishtar_common/migrations/0048_auto_20180423_1838.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-23 18:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0047_auto_20180418_1802'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='area',
+ name='parent',
+ field=models.ForeignKey(blank=True, help_text='Only four level of parent are managed.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='ishtar_common.Area', verbose_name='Parent'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='towns',
+ field=models.ManyToManyField(blank=True, related_name='areas', to='ishtar_common.Town', verbose_name='Towns'),
+ ),
+ ]