所以我试图用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)成为可搜索标准之一。我真的找不到任何关于如何使关系可搜索的内容,基本的例子只使用完全扁平的模型。谢谢。
答案 0 :(得分:0)
执行此操作的一种方法是提取GalleryIndex
模板文件中的数据。
类似的东西:
{% for s in object.hasTags.all %}
{{t.tag}}
{% endfor %}
如果出于某种原因,解析您的关系对于模板而言过于复杂,则向GalleryIndex
添加一个名为tags的字段,并添加查询相关数据的例程prepare_tags(self, obj)
,连接并将其作为一个字符串。