2010-08-27 18 views
6

मैंने अपनी अनुक्रमणिका (हैस्टैक) में एक बहुविकल्पीय फ़ील्ड जोड़ा है, मुझे कई लोगों से संबंधित क्षेत्र की खोज करने की आवश्यकता है, लेकिन यह काम नहीं करता है।Django haystack multivalued काम नहीं करता

इंजन WHOOSH है।

इस तरह मेरी सूचकांक लगता है:

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()] 

और यह कैसे मेरे मॉडल की तरह दिखता है:।

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) 

अगर मैं SearchQuerySet का उपयोग() को फिल्टर (region__in = words_list) यह काम करता है। समस्या यह है कि मुझे नहीं पता कि उपयोगकर्ता किसी क्षेत्र या किसी अन्य क्षेत्र की खोज कर रहा है, इसलिए मुझे SearchQuerySet() फ़िल्टर (content__icontains = words_list) का उपयोग करना होगा। और इस तरह से कुछ भी नहीं मिला है।

धन्यवाद

धन्यवाद !!

+0

आप अपनी अनुक्रमणिका टेम्पलेट के क्षेत्रों क्षेत्र को जोड़ने था प्रयास करें? – soField

+0

[Solr] (http://lucene.apache.org/solr/) का उपयोग करने का प्रयास करें। बहुत, बहुत तेज़। –

+0

बस {{{object.regions.all | जोड़ने के बारे में क्या शामिल हों: ""}}} 'text' फ़ील्ड के टेम्पलेट में? – maciek

उत्तर

0

प्रयास करें:

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

आप केवल क्षेत्र के लिए सूचकांक करने के लिए क्षेत्र आईडी जोड़ें।

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