2010-08-27 25 views
6

Tôi đã thêm một MultivaluedField vào chỉ mục của tôi (haystack), tôi cần phải tìm kiếm một trường liên quan ManyToMany, nhưng nó không hoạt động.Django haystack đa giá trị không hoạt động

Động cơ là WHOOSH.

này như thế nào chỉ số của tôi trông giống như:

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

Và điều này như thế nào mô hình của tôi trông giống như:.

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) 

Nếu tôi sử dụng SearchQuerySet() lọc (region__in = words_list) nó hoạt động. Vấn đề là tôi không biết khi nào người dùng đang tìm kiếm một vùng hoặc một trường khác, vì vậy tôi phải sử dụng bộ lọc SearchQuerySet(). (Content__icontains = words_list). Và theo cách này không có gì được tìm thấy.

Cảm ơn

Cảm ơn !!

+0

bạn đã thêm lĩnh vực vùng để template index của bạn? – soField

+0

Thử sử dụng [Solr] (http://lucene.apache.org/solr/). Nhiều, nhanh hơn nhiều. –

+0

Còn về việc thêm '{{object.regions.all | tham gia: ""}} 'trong mẫu của trường' văn bản'? – maciek

Trả lời

0

Hãy thử:

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

Bạn chỉ thêm id khu vực để chỉ số cho khu vực.

Hãy thử

def prepare_regions(self, obj): 
     return [region.pk for region in obj.regions.all()] 
Các vấn đề liên quan