haystack ignoring fields?
[prawokultury.git] / migdal / search_indexes.py
diff --git a/migdal/search_indexes.py b/migdal/search_indexes.py
new file mode 100644 (file)
index 0000000..6223b6e
--- /dev/null
@@ -0,0 +1,40 @@
+import datetime
+from haystack import indexes
+from migdal.models import Entry
+from django.conf import settings
+from copy import copy
+
+
+class EntryIndex(indexes.SearchIndex, indexes.Indexable):
+    date = indexes.DateTimeField(indexed=True)
+    author = indexes.CharField()
+
+    def get_model(self):
+        return Entry
+
+    def index_queryset(self):
+        """Used when the entire index for model is updated."""
+        return self.get_model().objects.filter(date__lte=datetime.datetime.now())
+
+
+def add_translatable(index_class, fields, languages=None):
+    """Adds some translatable fields to a search index, and a getter."""
+    if languages is None:
+        languages = settings.LANGUAGES
+    for name, field in fields.items():
+        for lang_code, lang_name in languages:
+            new_field = copy(field)
+            fname = "%s_%s" % (name, lang_code)
+            new_field.index_fieldname = fname
+            setattr(index_class, fname, new_field)
+            index_class.fields[fname] = new_field
+
+
+add_translatable(EntryIndex, {
+    'title': indexes.CharField(indexed=True, document=False),
+    'lead': indexes.CharField(indexed=True, document=False),
+    'body': indexes.CharField(indexed=True, document=False)
+    })
+
+
+getattr(EntryIndex, "body_%s" % settings.LANGUAGE_CODE).document = True