i have haystack + django + aldryn-search setup searches on django-cms project. trying indexes on models work, can see results , text description fine, urls /search/none. how override url definition?
search_indexes.py:
import datetime haystack import indexes .models import event class eventindex(indexes.searchindex, indexes.indexable): text = indexes.charfield(document=true, use_template=true) title = indexes.charfield(model_attr='title') def get_model(self): return event def index_queryset(self, using=none): "used when entire index model updated." return self.get_model().objects.order_by('created') models.py
class event(changesmixin, models.model): .... title = models.charfield(max_length=40) .... def __str__(self): return self.title def get_absolute_url(self): return '/cab/event/%i/' % self.id
i see you're not subclassing aldrynindexbase or abstractindex base indexes aldryn-search, means you'll need define url field since you're subclassing haystack's builtin index class not come fields predefined.
you can add so:
class eventindex(indexes.searchindex, indexes.indexable): url = indexes.charfield(model_attr='get_absolute_url') or:
class eventindex(indexes.searchindex, indexes.indexable): url = indexes.charfield() def prepare_url(self, obj): return obj.get_absolute_url() i recommend approach number 2 because approach number 1 behaves differently if provided attribute string has double underscores get__title woul event.get.title instead of event.get__title.
if event model supports multiple languages using libraries django-hvad or django-parler, highly recommend use aldrynindexbaseorabstractindexinstead of haystack'sindexes.searchindex```.
Comments
Post a Comment