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  | 
