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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With