haystack - 如何使用ForeignKeys显示来自多个模型的数据?

ava*_*tar 7 django solr django-models 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()
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*gan 6

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

class Model2(models.Model):
   field1_model2 = models.ForeignKey(Model1, related_name='something')
   field2_model2 = models.CharField()
Run Code Online (Sandbox Code Playgroud)

然后索引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)
Run Code Online (Sandbox Code Playgroud)

在您的search.html中,您将使用{{ result.field1_model1 }}和显示数据{{ result.field2_model2 }}

不要忘记将字段添加到.txt文件中,可能在模板 - >搜索 - >索引 - > app_name中称为model1_text.txt.(或类似的东西)

{{ object.field1_model1 }}
{{ object.field2_model2 }}
Run Code Online (Sandbox Code Playgroud)

然后它应该只是更新架构和重建索引的问题,你应该很高兴.