Django-haystack - 如何表示搜索索引中的关系?

时间:2014-04-19 18:04:03

标签: python django elasticsearch django-haystack

所以我试图用Django-Haystack(elasticsearch后端)索引一些项目,其中一个索引标准是项目上的标签,这是一个m2m关系(我实现了我自己的自定义解决方案,因为它对我来说更容易比使用taggit),这是我的模型的样子。

class GalleryTag(models.Model):
    tag = models.CharField(max_length=100, unique=True)
    slug = AutoSlugField(populate_from='tag', unique=True)

    class Meta:
        abstract = True
    def __unicode__(self):
        return self.tag


class Tag(GalleryTag):
    pass


class Artist(GalleryTag):
    pass


class Character(GalleryTag):
    pass

class Gallery(models.Model):    
    characters = models.ManyToManyField(Character, blank=True, related_name='characters')
    artists = models.ManyToManyField(Artist, blank=True, related_name='artists')
    tags = models.ManyToManyField(Tag, blank=True, related_name='tags')
    def __unicode__(self):
        return self.name

我想要索引的可搜索对象是Gallery,我希望能够让标签,艺术家和角色(所有m2ms)成为可搜索标准之一。我真的找不到任何关于如何使关系可搜索的内容,基本的例子只使用完全扁平的模型。谢谢。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是提取GalleryIndex模板文件中的数据。 类似的东西:

{% for s in object.hasTags.all %}
{{t.tag}}
{% endfor %}

如果出于某种原因,解析您的关系对于模板而言过于复杂,则向GalleryIndex添加一个名为tags的字段,并添加查询相关数据的例程prepare_tags(self, obj),连接并将其作为一个字符串。