2010-08-27 11 views
6

Ich habe ein MultivaluedField zu meinem Index hinzugefügt (Heuhaufen), ich muss nach einem ManyToMany verwandten Feld suchen, aber es funktioniert nicht.Django Heuhaufen mehrwertig funktioniert nicht

Der Motor ist WHOOSH. Diese

wie mein Index wie folgt aussieht:

class PostIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    author = CharField(model_attr='author') 
    body = CharField(model_attr='body') 
    pub_date = DateTimeField(model_attr='publish') 
    regions = MultiValueField() 

def prepare_regions(self, obj): 
    return [region.name for region in obj.regions.all()] 

Und das, wie mein Modell sieht so aus:.

class Post(models.Model): 

    title   = models.CharField(_('title'), max_length=200) 
    author   = models.ForeignKey(User, blank=True, null=True) 
    body   = models.TextField(_('body'),) 
    allow_comments = models.BooleanField(_('allow comments'), default=True) 
    publish   = models.DateTimeField(_('publish'), default=datetime.datetime.now) 
    categories  = models.ManyToManyField(Category, blank=True) 
    tags   = TagField() 
    objects   = PublicManager() 

    regions   = models.ManyToManyField(Region, blank=True) 

Wenn ich SearchQuerySet() verwenden Filter (region__in = words_list) es funktioniert. Das Problem ist, dass ich nicht weiß, wenn der Benutzer nach einer Region oder einem anderen Feld sucht, also muss ich SearchQuerySet() verwenden. Filter (content__icontains = words_list). Und auf diese Weise wird nichts gefunden.

Danke

Danke !!

+0

haben Sie Regionen Feld Ihre Index Vorlage hinzufügen? – soField

+0

Versuchen Sie es mit [Solr] (http://lucene.apache.org/solr/). Viel, viel schneller. –

+0

Was ist nur hinzufügen '{{object.regions.all | beitreten: ""}} 'in der Vorlage von' Text' Feld? – maciek

Antwort

0

Versuchen:

class PostIndex(SearchIndex): 
text = CharField(document=True, use_template=True) 
author = CharField(model_attr='author') 
body = CharField(model_attr='body') 
pub_date = DateTimeField(model_attr='publish') 

regions = CharField(model_attr='regions') 
0

Sie nur Region id dem Index für Region hinzufügen.

Versuchen

def prepare_regions(self, obj): 
     return [region.pk for region in obj.regions.all()] 
Verwandte Themen