стог сена - как вы отображаете данные из нескольких моделей с ForeignKeys? - PullRequest
7 голосов
/ 24 июля 2011

У меня есть две модели:

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, чтобы это произошло?

1 Ответ

6 голосов
/ 11 сентября 2011

Сначала вы должны добавить связанное имя к своему внешнему ключу, чтобы вы могли вызвать его позже.

class Model2(models.Model):
   field1_model2 = models.ForeignKey(Model1, related_name='something')
   field2_model2 = models.CharField()

Затем индексируйте Model1.Для field2_model2 подготовьте данные, получив информацию, как показано ниже.

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)

В вашем search.html вы бы отображали данные с {{ result.field1_model1 }} и {{ result.field2_model2 }}

Нене забудьте добавить поля в свой файл .txt, который, вероятно, называется model1_text.txt в шаблонах -> поиск -> индексы -> имя_приложения.(или что-то похожее)

{{ object.field1_model1 }}
{{ object.field2_model2 }}

И тогда нужно просто обновить схему и перестроить ваш индекс, и вы должны быть в порядке.

...