diff options
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 |
commit | 43c017bc8dd00372f26728130b00b1cd9196fb10 (patch) | |
tree | 3c5fab3ad0c77f861ee46e18d14e7d6f848226af | |
parent | bf3810a26abe3c53fc11c4afe52e865cd5dbcc54 (diff) | |
download | Ishtar-43c017bc8dd00372f26728130b00b1cd9196fb10.tar.bz2 Ishtar-43c017bc8dd00372f26728130b00b1cd9196fb10.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.py | 16 | ||||
-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.py | 13 | ||||
-rw-r--r-- | archaeological_finds/models_treatments.py | 16 | ||||
-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.py | 26 | ||||
-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.py | 9 | ||||
-rw-r--r-- | example_project/settings.py | 4 | ||||
-rw-r--r-- | ishtar_common/models.py | 10 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 2 |
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 |