6223b6ebecced31ab73418c7123a15127342f115
[prawokultury.git] / migdal / search_indexes.py
1 import datetime
2 from haystack import indexes
3 from migdal.models import Entry
4 from django.conf import settings
5 from copy import copy
6
7
8 class EntryIndex(indexes.SearchIndex, indexes.Indexable):
9     date = indexes.DateTimeField(indexed=True)
10     author = indexes.CharField()
11
12     def get_model(self):
13         return Entry
14
15     def index_queryset(self):
16         """Used when the entire index for model is updated."""
17         return self.get_model().objects.filter(date__lte=datetime.datetime.now())
18
19
20 def add_translatable(index_class, fields, languages=None):
21     """Adds some translatable fields to a search index, and a getter."""
22     if languages is None:
23         languages = settings.LANGUAGES
24     for name, field in fields.items():
25         for lang_code, lang_name in languages:
26             new_field = copy(field)
27             fname = "%s_%s" % (name, lang_code)
28             new_field.index_fieldname = fname
29             setattr(index_class, fname, new_field)
30             index_class.fields[fname] = new_field
31
32
33 add_translatable(EntryIndex, {
34     'title': indexes.CharField(indexed=True, document=False),
35     'lead': indexes.CharField(indexed=True, document=False),
36     'body': indexes.CharField(indexed=True, document=False)
37     })
38
39
40 getattr(EntryIndex, "body_%s" % settings.LANGUAGE_CODE).document = True