问题描述
我有两个模型:
models.py
class model1(models.Model):
field1_model1 = models.CharField()
filed2_model1 = models.CharField()
class model2(models.Model):
field1_model2 = models.ForeignKey(model1)
field2_model2 = models.CharField()
使用干草堆我想根据filed1_model1进行文本搜索,但是当我这样做时,我还想在搜索结果中显示filed2_model2。
search_indexes.py和还可以在search.html模板文件中发生这种情况?
首先,您应该将相关名称添加到您的外键,以便稍后调用。
class Model2(models.Model):
field1_model2 = models.ForeignKey(Model1,related_name ='something')
field2_model2 = models .CharField()
然后索引Model1。对于field2_model2,通过获取以下信息来准备数据。
class Model1Index(indexes.SearchIndex):
pre>
text = indexes.CharField(document = True,use_template = True)
field1_model1 = indexes.CharField(model_attr ='field1_model1',faceted = True)
field2_model2 = indexes.Charfield()
def prepare_field2_model2(self,obj):
return obj.something.field2_model2
site.register(Model1,Model1Index)
在您的search.html中,您将使用
{{result.field1_model1}}
和{{result.field2_model2}}
不要忘记将字段添加到.txt文件中,可能称为model1_text .txt in templates - > search - > indexes - > app_name。 (或类似的东西)
{{object.field1_model1}}
{{object.field2_model2}}
然后它应该是更新模式和重建索引的问题,你应该很好。
I have two models:
models.py
class model1 (models.Model): field1_model1 = models.CharField() filed2_model1 = models.CharField() class model2 (models.Model): field1_model2 = models.ForeignKey(model1) field2_model2 = models.CharField()
Using Haystack I want to do a text search based on the filed1_model1 but when I do that I want to show also filed2_model2 in the search results.
What goes in the search_indexes.py and also in the search.html template files to make this happen?
解决方案First you should add a related name to your foreign key so you can call it later.
class Model2(models.Model): field1_model2 = models.ForeignKey(Model1, related_name='something') field2_model2 = models.CharField()
Then index Model1. For field2_model2, prepare the data by getting the info as seen below.
class Model1Index(indexes.SearchIndex): text = indexes.CharField(document=True, use_template=True) field1_model1 = indexes.CharField(model_attr='field1_model1', faceted=True) field2_model2 = indexes.Charfield() def prepare_field2_model2(self, obj): return obj.something.field2_model2 site.register(Model1, Model1Index)
In your search.html you would display the data with
{{ result.field1_model1 }}
and{{ result.field2_model2 }}
Don't forget to add the fields to your .txt file, probably called model1_text.txt in templates -> search -> indexes -> app_name. (or something similar)
{{ object.field1_model1 }} {{ object.field2_model2 }}
And then it should just be a matter of updating the schema and rebuilding your index and you should be good to go.
这篇关于haystack - 如何使用ForeignKeys显示多个模型的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!