python - Django how to get haystack working with django-hvad -


i'm working on multilingual application need implement search engine, opted haystack.

this model want index

class post(translatablemodel):     category = models.foreignkey(         category,         related_name='posts',         verbose_name=_(u'categoría')     )     slug = autoslugfield(         populate_from='title'     )     featured_picture = thumbnailerimagefield(         upload_to='blog/posts/featured-pictures',         verbose_name=_(u'imagen destacada'),         help_text=_(u'tamaño: 850 x 423px. será recordada si no.')     )     box_bg = models.charfield(         max_length=20,         verbose_name=_(u'color de fondo de la caja'),         choices=service_box_colors,         # image         null=true, blank=true     )     box_image_bg = thumbnailerimagefield(         upload_to='blog/posts/background-images',         verbose_name=_(u'imagen de fondo de la caja'),         null=true, blank=true,         help_text=_(u'tamaño: 500 x 500px. será recordada si no.')     )      translations = translatedfields(         title=models.charfield(             max_length=100,             verbose_name=_(u'título')         ),         content=richtextfield(             verbose_name=_(u'contenido')         ),         meta_description=models.textfield(             verbose_name=_(u'meta description (seo)'),             help_text=_(u'máximo 160 caracteres.'),             max_length=160         )     ) 

i don't know in haystack how deal hvad translation fields

i describe did when faced similar problem.

in index definition, specify field current language. django-hvad returns 'language_code' field if query, example:

 class postindex(indexes.searchindex, indexes.indexable):      # field definitions here      lan = indexes.charfield(model_attr='language_code')       # rest of configuration here       def index_queryset(self, using=none):          return self.get_model().objects.language('all').all()       def read_queryset(self, using=none):          return self.get_model().objects.language() 

this way when haystack indexes posts, every language version separately , store along language code.

you have modify search form include lan field filter:

class postsearchform(searchform):     lan = forms.charfield(required=false)      def search(self):         sqs = super(postsearchform, self).search()         if not self.is_valid():             return self.no_query_found()         if self.cleaned_data.get('lan'):             sqs = sqs.filter(lan=self.cleaned_data['lan'])         return sqs 

it can hidden input field, value taken request.language_code.