From c60fbc19cfb1dca1239ecf3dec11a8aa7f9274cd 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 Conflicts: telemeta/models/query.py --- telemeta/models/query.py | 29 +++++++++++++++++++---------- telemeta/views/home.py | 2 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/telemeta/models/query.py b/telemeta/models/query.py index d01b11dc..0fd1df34 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -200,17 +200,19 @@ class MediaItemQuerySet(CoreQuerySet): def sound(self): return self.filter(file__contains='/') - def by_instrument(self, instrument): + def sound_public(self): + return self.filter(file__contains='/', public_access='full', collection__public_access='full') + + def by_instrument(self, name): "Find items by instrument" from telemeta.models.instrument import Instrument - from telemeta.models.media import MediaItemPerformance - instruments = Instrument.objects.filter(name__contains=name) - perf = [] - if instruments: - performances = MediaItemPerformance.objects.filter(instrument__in=instruments) + instruments = Instrument.objects.filter(name=name) + items = [] + for instrument in instruments: + performances = instrument.performances.all() for performance in performances: - perf.append(performance) - return self.filter(performances__in=perf).distinct() + items.append(performance.media_item) + return items class MediaItemManager(CoreManager): "Manage media items queries" @@ -346,9 +348,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 411193d5..4823a1ca 100644 --- a/telemeta/views/home.py +++ b/telemeta/views/home.py @@ -252,7 +252,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