# HG changeset patch # User Alexandre Segura # Date 1489057906 -3600 # Node ID 5daa15b87404ed54d5255b88b260c5d2dbd1c2a5 # Parent c4b700679964930ede38319607148119ce800de6 Introduce folders. diff -r c4b700679964 -r 5daa15b87404 src/iconolab/admin.py --- a/src/iconolab/admin.py Thu Mar 02 16:59:01 2017 +0100 +++ b/src/iconolab/admin.py Thu Mar 09 12:11:46 2017 +0100 @@ -3,6 +3,7 @@ # Iconolab objects admin.site.register(models.Collection) +admin.site.register(models.Folder) admin.site.register(models.Item) admin.site.register(models.Image) admin.site.register(models.Annotation) @@ -17,4 +18,4 @@ # Comment system admin.site.register(models.IconolabComment) admin.site.register(models.MetaCategory) -admin.site.register(models.MetaCategoryInfo) \ No newline at end of file +admin.site.register(models.MetaCategoryInfo) diff -r c4b700679964 -r 5daa15b87404 src/iconolab/migrations/0019_auto_20170309_1022.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iconolab/migrations/0019_auto_20170309_1022.py Thu Mar 09 12:11:46 2017 +0100 @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-09 10:22 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('iconolab', '0018_auto_20161215_1731'), + ] + + operations = [ + migrations.CreateModel( + name='Folder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ], + ), + migrations.AddField( + model_name='item', + name='folders', + field=models.ManyToManyField(to='iconolab.Folder'), + ), + ] diff -r c4b700679964 -r 5daa15b87404 src/iconolab/models.py --- a/src/iconolab/models.py Thu Mar 02 16:59:01 2017 +0100 +++ b/src/iconolab/models.py Thu Mar 09 12:11:46 2017 +0100 @@ -43,9 +43,21 @@ width = models.IntegerField(null=True, blank=True) show_image_on_home = models.BooleanField(default=False) + @property + def folders(self): + return Folder.objects.filter(item__collection=self).distinct() + def __str__(self): return self.name +class Folder(models.Model): + """ + Some items may belong to a "folder". This is actually a physical folder + """ + name = models.TextField(null=False, blank=False) + + def __str__(self): + return 'Folder ' + self.name class Item(models.Model): """ @@ -54,6 +66,7 @@ """ collection = models.ForeignKey(Collection, related_name="items") item_guid = models.UUIDField(default=uuid.uuid4, editable=False) + folders = models.ManyToManyField('Folder') def __str__(self): return str(self.item_guid) + ":from:" + self.collection.name diff -r c4b700679964 -r 5daa15b87404 src/iconolab/templates/iconolab/collection_home.html --- a/src/iconolab/templates/iconolab/collection_home.html Thu Mar 02 16:59:01 2017 +0100 +++ b/src/iconolab/templates/iconolab/collection_home.html Thu Mar 09 12:11:46 2017 +0100 @@ -16,6 +16,24 @@

{{ collection.description | safe }}

+ {% if collection.folders %} +

{{ collection.folders|length }} dossier{% if collection.folders|length > 1 %}s{% endif %}

+ + {% endif %}

{{ collection.verbose_name }} Fonds Iconolab

diff -r c4b700679964 -r 5daa15b87404 src/iconolab/views/objects.py --- a/src/iconolab/views/objects.py Thu Mar 02 16:59:01 2017 +0100 +++ b/src/iconolab/views/objects.py Thu Mar 09 12:11:46 2017 +0100 @@ -220,9 +220,18 @@ adjacent_pages_count = 2 # Paginated objects list - items_list = collection.items.order_by("metadatas__inventory_number").all() + items_list = collection.items.order_by("metadatas__inventory_number") + + folder = request.GET.get('folder', None) + + if folder is not None: + folder = int(folder) + items_list = items_list.filter(folders__id=folder) + + context['folder_id'] = folder + context["items_pagination_data"] = self.get_pagination_data( - items_list, + items_list.all(), items_page, items_per_page, adjacent_pages_count, diff -r c4b700679964 -r 5daa15b87404 src_js/iconolab-bundle/src/iconolab.scss --- a/src_js/iconolab-bundle/src/iconolab.scss Thu Mar 02 16:59:01 2017 +0100 +++ b/src_js/iconolab-bundle/src/iconolab.scss Thu Mar 09 12:11:46 2017 +0100 @@ -481,7 +481,4 @@ margin: 0 auto; margin-bottom: 20px; } - > a { - text-align: center; - } }