2012-08-13 24 views
6

¿Hay alguna forma de tener solo una parte filtrada de un modelo como SeachQuerySet?Django Haystack - Buscar en muchos campos no indexados en muchos

algo como:..

consulta = SearchQuerySet() modelos (Entry.filter (categories__name = 'algo'))

en lugar de

consulta = SearchQuerySet() modelos (de entrada)

El campo que quiero filtrar es un campo manytomany y no indexado.

Respuesta

14

El índice de búsqueda no almacena ninguna relación, por lo tanto es 'plano'. Sólo se puede agregar ID sus Categories para el índice de Entry (tenga en cuenta que usted tiene que utilizar un -method prepare_ para esto):

class EntryIndex(indexes.SearchIndex, indexes.Indexable): 
    # your other fields 
    categories = MultiValueField() 

    def prepare_categories(self, obj): 
     return [category.pk for category in obj.categories.all()] 

El puede hacer algo como:

category = Category.objects.get(name='something') 
sqs = SearchQuerySet().models(Entry).filter(categories=category.pk) 
Cuestiones relacionadas