summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-09 17:49:16 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:44:18 +0200
commit3f14d0f6481f1781d598d29b79a96fb7ee727320 (patch)
tree3c5fab3ad0c77f861ee46e18d14e7d6f848226af
parent9a16cb47b06e22446e3593d8cc68186c0eac2093 (diff)
downloadIshtar-3f14d0f6481f1781d598d29b79a96fb7ee727320.tar.bz2
Ishtar-3f14d0f6481f1781d598d29b79a96fb7ee727320.zip
Standardize related field item for imagee collections (refs #4076)
-rw-r--r--archaeological_context_records/migrations/0021_auto_20180509_1736.py (renamed from archaeological_context_records/migrations/0021_auto_20180423_1838.py)18
-rw-r--r--archaeological_context_records/models.py16
-rw-r--r--archaeological_finds/migrations/0024_auto_20180509_1742.py (renamed from archaeological_finds/migrations/0024_auto_20180423_1838.py)20
-rw-r--r--archaeological_finds/models_finds.py13
-rw-r--r--archaeological_finds/models_treatments.py16
-rw-r--r--archaeological_operations/migrations/0027_auto_20180509_1723.py (renamed from archaeological_operations/migrations/0027_auto_20180423_1838.py)18
-rw-r--r--archaeological_operations/models.py26
-rw-r--r--archaeological_warehouse/migrations/0017_auto_20180509_1747.py (renamed from archaeological_warehouse/migrations/0017_auto_20180423_1838.py)10
-rw-r--r--archaeological_warehouse/models.py9
-rw-r--r--example_project/settings.py4
-rw-r--r--ishtar_common/models.py10
-rw-r--r--ishtar_common/wizards.py2
12 files changed, 90 insertions, 72 deletions
diff --git a/archaeological_context_records/migrations/0021_auto_20180423_1838.py b/archaeological_context_records/migrations/0021_auto_20180509_1736.py
index c26e46c07..d1267c67a 100644
--- a/archaeological_context_records/migrations/0021_auto_20180423_1838.py
+++ b/archaeological_context_records/migrations/0021_auto_20180509_1736.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.11.10 on 2018-04-23 18:38
+# Generated by Django 1.11.10 on 2018-05-09 17:36
from __future__ import unicode_literals
from django.db import migrations, models
@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
- ('ishtar_common', '0048_auto_20180423_1838'),
+ ('ishtar_common', '0050_licensetype_url'),
('archaeological_context_records', '0020_auto_20180430_1318'),
]
@@ -19,7 +19,12 @@ class Migration(migrations.Migration):
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')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.RemoveField(
model_name='contextrecord',
@@ -32,12 +37,7 @@ class Migration(migrations.Migration):
),
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'),
+ name='item',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', to='archaeological_context_records.ContextRecord'),
),
]
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index bdb21ea39..396b91f67 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -34,7 +34,7 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
HistoricalRecords, OwnPerms, ShortMenuItem, Source, GeneralRelationType,\
GeneralRecordRelations, post_delete_record_relation, get_image_path, \
ImageModel, post_save_cache, ValueGetter, BulkUpdatedItem, IshtarImage, \
- RelationItem
+ RelationItem, ThroughImage
from archaeological_operations.models import Operation, Period, Parcel, \
ArchaeologicalSite
@@ -485,11 +485,8 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem,
return True
def _get_base_image_path(self):
- ope = self.operation
- return u"operation/{}/{}/{}/{}".format(
- ope.year, ope.reference, self.SLUG,
- slugify(self.label or u"00")
- )
+ return self.operation._get_base_image_path() + \
+ u"/{}/{}".format(self.SLUG, slugify(self.label or u"00"))
@property
def reference(self):
@@ -565,10 +562,9 @@ 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 ContextRecordImage(ThroughImage):
+ item = models.ForeignKey(ContextRecord, on_delete=models.CASCADE,
+ related_name='associated_images')
class RelationType(GeneralRelationType):
diff --git a/archaeological_finds/migrations/0024_auto_20180423_1838.py b/archaeological_finds/migrations/0024_auto_20180509_1742.py
index faed5b69f..9b5367b0b 100644
--- a/archaeological_finds/migrations/0024_auto_20180423_1838.py
+++ b/archaeological_finds/migrations/0024_auto_20180509_1742.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.11.10 on 2018-04-23 18:38
+# Generated by Django 1.11.10 on 2018-05-09 17:42
from __future__ import unicode_literals
from django.db import migrations, models
@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
- ('ishtar_common', '0048_auto_20180423_1838'),
+ ('ishtar_common', '0050_licensetype_url'),
('archaeological_finds', '0023_auto_20180413_1637'),
]
@@ -21,6 +21,10 @@ class Migration(migrations.Migration):
('is_main', models.BooleanField(default=False, verbose_name='Main image')),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.CreateModel(
name='TreatmentImage',
@@ -29,6 +33,10 @@ class Migration(migrations.Migration):
('is_main', models.BooleanField(default=False, verbose_name='Main image')),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.RemoveField(
model_name='find',
@@ -50,12 +58,12 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name='treatmentimage',
- name='treatment',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.Treatment'),
+ name='item',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', 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'),
+ name='item',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', to='archaeological_finds.Find'),
),
]
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 94a8ccedc..dcf542f79 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -35,7 +35,7 @@ from ishtar_common.utils import cached_label_changed, post_save_point
from ishtar_common.models import GeneralType, HierarchicalType, ImageModel, \
BaseHistorizedItem, ShortMenuItem, LightHistorizedItem, \
HistoricalRecords, OwnPerms, Source, Person, Basket, post_save_cache, \
- ValueGetter, get_current_profile, IshtarImage
+ ValueGetter, get_current_profile, IshtarImage, ThroughImage
from archaeological_operations.models import AdministrativeAct, Operation
from archaeological_context_records.models import ContextRecord, Dating
@@ -929,8 +929,8 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
return u"detached/{}".format(self.SLUG)
ope = bf.context_record.operation
find_idx = u'{:0' + str(settings.ISHTAR_FINDS_INDEX_ZERO_LEN) + 'd}'
- return (u"operation/{}/{}/{}/" + find_idx).format(
- ope.year, ope.reference, self.SLUG, self.index)
+ return (u"{}/{}/" + find_idx).format(
+ ope._get_base_image_path(), self.SLUG, self.index)
@property
def administrative_index(self):
@@ -1433,10 +1433,9 @@ def base_find_find_changed(sender, **kwargs):
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 FindImage(ThroughImage):
+ item = models.ForeignKey(Find, on_delete=models.CASCADE,
+ related_name='associated_images')
class FindSource(Source):
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index f96a0febf..2baced6e1 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -30,7 +30,8 @@ from django.utils.translation import ugettext_lazy as _, ugettext
from ishtar_common.utils import cached_label_changed, get_current_year
from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
OwnPerms, HistoricalRecords, Person, Organization, Source, \
- ValueGetter, post_save_cache, ShortMenuItem, DashboardFormItem, IshtarImage
+ ValueGetter, post_save_cache, ShortMenuItem, DashboardFormItem, \
+ IshtarImage, ThroughImage
from archaeological_warehouse.models import Warehouse, Container
from archaeological_finds.models_finds import Find, FindBasket, TreatmentType
from archaeological_operations.models import ClosedItem, Operation
@@ -190,8 +191,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
return u'{} | {}'.format(u"-".join(items), self.treatment_types_lbl())
def _get_base_image_path(self,):
- return u"treatment/{}/{}".format(
- self.year, self.index)
+ return u"{}/{}/{}".format(self.SLUG, self.year, self.index)
def treatment_types_lbl(self):
"""
@@ -307,10 +307,9 @@ 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 TreatmentImage(ThroughImage):
+ item = models.ForeignKey(Treatment, on_delete=models.CASCADE,
+ related_name='associated_images')
class AbsFindTreatments(models.Model):
@@ -642,8 +641,7 @@ class TreatmentSource(Source):
return self.treatment
def _get_base_image_path(self):
- return u"treatment/{}/{}/source".format(
- self.treatment.year, self.treatment.index)
+ return u"{}/source".format(self.treatment._get_base_image_path())
class TreatmentFileSource(Source):
diff --git a/archaeological_operations/migrations/0027_auto_20180423_1838.py b/archaeological_operations/migrations/0027_auto_20180509_1723.py
index c9af8c928..181b6aa55 100644
--- a/archaeological_operations/migrations/0027_auto_20180423_1838.py
+++ b/archaeological_operations/migrations/0027_auto_20180509_1723.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.11.10 on 2018-04-23 18:38
+# Generated by Django 1.11.10 on 2018-05-09 17:23
from __future__ import unicode_literals
from django.db import migrations, models
@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
- ('ishtar_common', '0048_auto_20180423_1838'),
+ ('ishtar_common', '0050_licensetype_url'),
('archaeological_operations', '0026_auto_20180430_1318'),
]
@@ -21,6 +21,10 @@ class Migration(migrations.Migration):
('is_main', models.BooleanField(default=False, verbose_name='Main image')),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarImage')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.CreateModel(
name='SiteImage',
@@ -28,8 +32,12 @@ class Migration(migrations.Migration):
('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')),
+ ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', to='archaeological_operations.ArchaeologicalSite')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.RemoveField(
model_name='operation',
@@ -42,8 +50,8 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name='operationimage',
- name='operation',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.Operation'),
+ name='item',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', to='archaeological_operations.Operation'),
),
migrations.AddField(
model_name='archaeologicalsite',
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index aa9103f61..5ff3ddc2f 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -38,8 +38,8 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
SourceType, Person, Organization, Town, Dashboard, IshtarUser, ValueGetter,\
DocumentTemplate, ShortMenuItem, DashboardFormItem, GeneralRelationType,\
GeneralRecordRelations, post_delete_record_relation, OperationType, \
- ImageModel, post_save_cache, PersonType, IshtarImage, get_image_path, \
- RelationItem
+ ImageModel, post_save_cache, PersonType, IshtarImage, \
+ RelationItem, ThroughImage
class RemainType(GeneralType):
@@ -220,10 +220,9 @@ 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)
+class SiteImage(ThroughImage):
+ item = models.ForeignKey(ArchaeologicalSite, on_delete=models.CASCADE,
+ related_name='associated_images')
def get_values_town_related(item, prefix, values):
@@ -246,6 +245,7 @@ def get_values_town_related(item, prefix, values):
number=dpt).count()])
return values
+
QUALITY = (('ND', _(u"Not documented")),
('A', _(u"Arbitrary")),
('R', _(u"Reliable")),)
@@ -613,8 +613,7 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
return True
def _get_base_image_path(self):
- return u"operation/{}/{}".format(
- self.year, self.reference)
+ return u"{}/{}/{}".format(self.SLUG, self.year, self.reference)
def get_town_label(self):
lbl = unicode(_('Intercommunal'))
@@ -979,14 +978,9 @@ 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,
- related_name='associated_images')
- is_main = models.BooleanField(_(u"Main image"), default=False)
-
- class Meta:
- ordering = ('operation', '-is_main', 'image__name')
+class OperationImage(ThroughImage):
+ item = models.ForeignKey(Operation, on_delete=models.CASCADE,
+ related_name='associated_images')
class RelationType(GeneralRelationType):
diff --git a/archaeological_warehouse/migrations/0017_auto_20180423_1838.py b/archaeological_warehouse/migrations/0017_auto_20180509_1747.py
index fe183c312..76b384374 100644
--- a/archaeological_warehouse/migrations/0017_auto_20180423_1838.py
+++ b/archaeological_warehouse/migrations/0017_auto_20180509_1747.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.11.10 on 2018-04-23 18:38
+# Generated by Django 1.11.10 on 2018-05-09 17:47
from __future__ import unicode_literals
from django.db import migrations, models
@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
- ('ishtar_common', '0048_auto_20180423_1838'),
+ ('ishtar_common', '0050_licensetype_url'),
('archaeological_warehouse', '0016_auto_20180403_1120'),
]
@@ -20,8 +20,12 @@ class Migration(migrations.Migration):
('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')),
+ ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='associated_images', to='archaeological_warehouse.Warehouse')),
],
+ options={
+ 'ordering': ('-is_main', 'image__name'),
+ 'abstract': False,
+ },
),
migrations.AddField(
model_name='warehouse',
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index a860497e0..4edfe0d15 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, IshtarImage
+ ImageModel, DashboardFormItem, IshtarImage, ThroughImage
class WarehouseType(GeneralType):
@@ -204,10 +204,9 @@ 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 WarehouseImage(ThroughImage):
+ item = models.ForeignKey(Warehouse, on_delete=models.CASCADE,
+ related_name='associated_images')
class Collection(LightHistorizedItem):
diff --git a/example_project/settings.py b/example_project/settings.py
index d5efd2891..241e330f9 100644
--- a/example_project/settings.py
+++ b/example_project/settings.py
@@ -15,8 +15,8 @@ TEST_VIEWS = True
if "test" in sys.argv:
sys.path.insert(0, '..')
-IMAGE_MAX_SIZE = (1024, 768) # put None if no resizing
-THUMB_MAX_SIZE = (300, 300)
+IMAGE_MAX_SIZE = (1280, 960) # put None if no resizing
+THUMB_MAX_SIZE = (600, 600)
CACHE_SMALLTIMEOUT = 60
CACHE_TIMEOUT = 3600
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 35be3ffc0..d4d6d2c79 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -3065,6 +3065,16 @@ class IshtarImage(ImageModel):
ordering = ('name',)
+class ThroughImage(models.Model):
+ image = models.ForeignKey(
+ IshtarImage, on_delete=models.CASCADE)
+ is_main = models.BooleanField(_(u"Main image"), default=False)
+
+ class Meta:
+ ordering = ('-is_main', 'image__name')
+ abstract = True
+
+
if settings.COUNTRY == 'fr':
class Arrondissement(models.Model):
name = models.CharField(u"Nom", max_length=30)
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 2182e9060..f200447e4 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -789,6 +789,8 @@ class Wizard(NamedUrlWizardView):
for old_item in old_m2ms[key]:
is_ok = True
for k in value:
+ if not hasattr(old_item, k):
+ continue
if is_ok and getattr(old_item, k) != value[k]:
is_ok = False
continue