Индексные объекты Haystack, используя их обратную связь
У меня есть две модели:
class Question(models.Model):
question_text = models.TextField()
class Response(models.Model):
response_text = models.TextField()
question = models.ForeignKey(Question, related_name='responses', on_delete=models.CASCADE)
У меня есть один индекс поиска стога сена, чтобы проиндексировать все Question
"s question_text
:
class QuestionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
question_text = indexes.CharField(model_attr='question_text')
def get_model(self):
return Question
Как мне проиндексировать все response_text
так что когда я ищу Question
s, я получаю все вопросы, которые соответствуют question_text
и все вопросы, ответы на которые совпадают response_text
? Я хочу что-то вроде:
class QuestionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
question_text = indexes.CharField(model_attr='question_text')
response_text = indexes.CharField(model_attr='responses__response_text')
def get_model(self):
return Question
Главный вопрос: как мне проиндексировать все response_text
используя это QuestionIndex
учебный класс?
1 ответ
Вы можете поставить prepare_
метод для этого поля, чтобы указать, какие данные индексируются:
class QuestionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
question_text = indexes.CharField(model_attr='question_text')
response_text = indexes.CharField()
def prepare_response_text(self, obj):
return ', '.join([r.response_text for r in obj.responses.all()])