"Return an empty result set"
return self.extra(where = ["0 = 1"])
+ def pattern_to_regex(self, pattern):
+ regex = pattern;
+ regex = regex.replace('*', '.*')
+ regex = regex.replace('.', '.*')
+ regex = regex.replace('-', '.*')
+ regex = regex.replace(' ', '.*')
+ return regex
+
+ def word_search(self, field, pattern):
+ regex = self.pattern_to_regex(pattern)
+ kwargs = {field + '__iregex': regex}
+ return self.filter(**kwargs)
+
class CoreManager(Manager):
"Base class for all models managers"
def quick_search(self, pattern):
"Perform a quick search on id, title and creator name"
+ regex = self.pattern_to_regex(pattern)
return self.filter(
- Q(id__icontains=pattern) |
- Q(title__icontains=pattern) |
- Q(creator__icontains=pattern)
+ Q(id__iregex=regex) |
+ Q(title__iregex=regex) |
+ Q(creator__iregex=regex)
)
def by_country(self, country):
def quick_search(self, pattern):
"Perform a quick search on id and title"
+ regex = self.pattern_to_regex(pattern)
return self.filter(
- Q(id__icontains=pattern) |
- Q(_title__icontains=pattern) |
- Q(auteur__icontains=pattern)
+ Q(id__iregex=regex) |
+ Q(_title__iregex=regex) |
+ Q(auteur__iregex=regex)
)
def without_collection(self):
def by_title(self, pattern):
# to (sort of) sync with models.media.MediaItem.get_title()
- return self.filter(Q(_title__icontains=pattern)
- | Q(collection__title__icontains=pattern))
+ regex = self.pattern_to_regex(pattern)
+ return self.filter(Q(_title__iregex=regex)
+ | Q(collection__title__iregex=regex))
def by_publish_date(self, pattern):
return self.filter(collection__date_published__icontains=pattern)
collections.quick_search(value),
items.quick_search(value)),
'title': lambda value: (
- collections.filter(title__icontains=value),
+ collections.word_search('title', value),
items.by_title(value)),
'country': lambda value: (
collections.by_country(value),
collections.by_ethnic_group(value),
items.filter(ethnie_grsocial = value)),
'creator': lambda value: (
- collections.filter(creator__icontains=value),
- items.filter(auteur__icontains=value)),
+ collections.word_search('creator', value),
+ items.word_search('auteur', value)),
'rec_date': lambda value: (
collections.by_recording_date(value),
items.by_recording_date(value)),