Pom*_*eyo 6 python django django-haystack
使用prepare_FOO(self, object)方法,我试图索引一个ForeignKey来获取name我的标签的属性(旅行,家庭,...)
这是我的模特
class Blog(models.Model):
title = models.CharField(max_length=500)
description = models.TextField(blank=True, null=True)
tag = models.ForeignKey(Tag)
#...
Run Code Online (Sandbox Code Playgroud)
在我的search_index.py中,这就是我所拥有的:
class BlogIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
description = indexes.CharField(model_attr='description')
tag_name = indexes.CharField()
def get_model(self):
return Blog
def prepare_tag_name(self, obj):
return obj.tag.name
def index_queryset(self, using=None):
return self.get_model().objects.all().select_related('blog__tag')
Run Code Online (Sandbox Code Playgroud)
......还有我的blog_text:
{{ object.title }}
{{ object.description }}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢!
您只需在blog_text文件blog_text中添加以下内容并重建索引.它的工作原理!
{{ object.title }}
{{ object.description }}
{{ object.tag.name }}
Run Code Online (Sandbox Code Playgroud)
你在课堂上不需要这个 BlogIndex
tag_name = indexes.CharField()
def prepare_tag_name(self, obj):
return obj.tag.name
Run Code Online (Sandbox Code Playgroud)
类似的答案在这里
搜索多个字段
一个很好的解释是在这里
haystack多字段搜索
在索引中你应该定义一个字段document=True,这是haystack将搜索的文件.按照惯例,此字段命名为文本.如果您计划对其值进行过滤或排序,则可以添加额外的字段.
基本上,您在Index类中包含的字段主要用于排序或过滤.搜索字段在blog_text文件中定义.
这里的另一种解决方案更复杂. haystack - 如何使用ForeignKeys显示来自多个模型的数据?