From 81b6a21118d9258b90e1ae84ecc4cfeca519a4ee Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Mon, 15 Apr 2013 17:13:49 +0200 Subject: [PATCH] begin to fix search by instrument --- telemeta/models/query.py | 22 ++++++++++++++++++---- telemeta/views/home.py | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/telemeta/models/query.py b/telemeta/models/query.py index 7a078819..de634b79 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -203,9 +203,16 @@ class MediaItemQuerySet(CoreQuerySet): def sound_public(self): return self.filter(file__contains='/', public_access='full', collection__public_access='full') - def by_instrument(self, instrument): + def by_instrument(self, name): "Find items by instrument" - return self.filter(instruments__in=instrument) + from telemeta.models.instrument import Instrument + instruments = Instrument.objects.filter(name=name) + items = [] + for instrument in instruments: + performances = instrument.performances.all() + for performance in performances: + items.append(performance.media_item) + return items class MediaItemManager(CoreManager): @@ -346,9 +353,16 @@ class MediaCollectionQuerySet(CoreQuerySet): def sound(self): return self.filter(items__file__contains='/').distinct() - def by_instrument(self, instrument): + def by_instrument(self, name): "Find collections by instrument" - return self.filter(items__instruments__in=instrument).distinct() + from telemeta.models.instrument import Instrument + instruments = Instrument.objects.filter(name=name) + items = [] + for instrument in instruments: + performances = instrument.performances.all() + for performance in performances: + items.append(performance.media_item) + return self.filter(items__in=items).distinct() class MediaCollectionManager(CoreManager): diff --git a/telemeta/views/home.py b/telemeta/views/home.py index 380ec269..f0d365bd 100644 --- a/telemeta/views/home.py +++ b/telemeta/views/home.py @@ -254,7 +254,7 @@ class HomeView(object): return list_detail.object_list(request, objects, template_name='telemeta/search_results.html', paginate_by=20, extra_context={'criteria': criteria, 'collections_num': collections.count(), - 'items_num': items.count(), 'corpus_num': corpus.count(), 'fonds_num': fonds.count(), + 'items_num': len(items), 'corpus_num': corpus.count(), 'fonds_num': fonds.count(), 'type' : type,}) def complete_location(self, request, with_items=True): -- 2.39.5