haystack - 如何使用外键显示多个模型的数据?

时间:2011-07-24 03:45:00

标签: django django-models solr django-haystack

我有两种模式:

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()

使用Haystack我想基于filed1_model1进行文本搜索,但是当我这样做时,我想在搜索结果中显示filed2_model2。

search_indexes.py以及search.html模板文件中的内容是什么?

1 个答案:

答案 0 :(得分:6)

首先,您应该为外键添加相关名称,以便稍后调用。

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 - >搜索 - >索引 - > APP_NAME。 (或类似的东西)

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

然后它应该只是更新架构和重建索引,你应该好好去。