From: yomguy
Date: Wed, 22 Feb 2012 14:04:42 +0000 (+0100)
Subject: try instrument filter
X-Git-Tag: 1.4.3-2~7^2~28
X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=c9f9871488749fb58e7e165f30e023ea37193870;p=telemeta.git
try instrument filter
---
diff --git a/telemeta/models/media.py b/telemeta/models/media.py
index ae1eb94d..a25929df 100644
--- a/telemeta/models/media.py
+++ b/telemeta/models/media.py
@@ -408,6 +408,24 @@ class MediaItem(MediaResource):
title += ' ' + self.track
return title
+ @property
+ def instruments(self):
+ "Return the instruments of the item"
+ instruments = []
+ performances = MediaItemPerformance.objects.filter(media_item=self)
+ for performance in performances:
+ instrument = performance.instrument
+ alias = performance.alias
+ if not instrument in instruments:
+ instruments.append(instrument)
+ if not alias in instruments:
+ instruments.append(alias)
+
+ instruments.sort(self.__name_cmp)
+ return instruments
+
+ instruments.verbose_name = _("instruments")
+
class MediaItemRelated(MediaRelated):
"Item related media"
diff --git a/telemeta/models/query.py b/telemeta/models/query.py
index 0583d081..df6d1778 100644
--- a/telemeta/models/query.py
+++ b/telemeta/models/query.py
@@ -200,6 +200,10 @@ class MediaItemQuerySet(CoreQuerySet):
def sound(self):
return self.filter(file__contains='/')
+ def by_instrument(self, instrument):
+ "Find items by instrument"
+ return self.filter(instruments__in=instrument)
+
class MediaItemManager(CoreManager):
"Manage media items queries"
@@ -244,6 +248,10 @@ class MediaItemManager(CoreManager):
return self.get_query_set().sound(*args, **kwargs)
sound.__doc__ = MediaItemQuerySet.sound.__doc__
+ def by_instrument(self, *args, **kwargs):
+ return self.get_query_set().by_instrument(*args, **kwargs)
+ by_instrument.__doc__ = MediaItemQuerySet.by_instrument.__doc__
+
class MediaCollectionQuerySet(CoreQuerySet):
@@ -331,6 +339,10 @@ class MediaCollectionQuerySet(CoreQuerySet):
def sound(self):
return self.filter(items__file__contains='/').distinct()
+ def by_instrument(self, instrument):
+ "Find collections by instrument"
+ return self.filter(items__instruments__in=instrument).distinct()
+
class MediaCollectionManager(CoreManager):
"Manage collection queries"
@@ -375,6 +387,10 @@ class MediaCollectionManager(CoreManager):
return self.get_query_set().sound(*args, **kwargs)
sound.__doc__ = MediaCollectionQuerySet.sound.__doc__
+ def by_instrument(self, *args, **kwargs):
+ return self.get_query_set().by_instrument(*args, **kwargs)
+ by_instrument.__doc__ = MediaCollectionQuerySet.by_instrument.__doc__
+
class LocationQuerySet(CoreQuerySet):
__flatname_map = None
@@ -477,3 +493,33 @@ class MediaFondsManager(CoreManager):
def quick_search(self, *args, **kwargs):
return self.get_query_set().quick_search(*args, **kwargs)
quick_search.__doc__ = MediaFondsQuerySet.quick_search.__doc__
+
+
+class InstrumentQuerySet(CoreQuerySet):
+ "Base class for all media instrument query sets"
+
+ def quick_search(self, pattern):
+ "Perform a quick search on text and char fields"
+ from telemeta.models.instrument import Instrument
+ mod = Instrument()
+ pattern = pattern.strip()
+ q = Q(code__contains=pattern)
+ fields = mod.to_dict()
+ keys = fields.keys()
+ for field in keys:
+ field_str = str(mod._meta.get_field(field))
+ if 'CharField' in field_str or 'TextField' in field_str:
+ q = q | word_search_q(field, pattern)
+ return self.filter(q)
+
+
+class InstrumentManager(CoreManager):
+ "Manage instrument queries"
+
+ def get_query_set(self):
+ "Return instrument query sets"
+ return InstrumentQuerySet(self.model)
+
+ def quick_search(self, *args, **kwargs):
+ return self.get_query_set().quick_search(*args, **kwargs)
+ quick_search.__doc__ = InstrumentQuerySet.quick_search.__doc__
diff --git a/telemeta/templates/telemeta/search_criteria.html b/telemeta/templates/telemeta/search_criteria.html
index 6885f9e8..d02bf43d 100644
--- a/telemeta/templates/telemeta/search_criteria.html
+++ b/telemeta/templates/telemeta/search_criteria.html
@@ -64,6 +64,11 @@ $(document).ready(function () {
+
+
+
+
+