Django Haystack:如何从另一个类索引字段

时间:2017-07-10 06:19:23

标签: python django elasticsearch django-haystack

我有一个django模型Story,我可以成功地使用模板进行索引。但是,还有另一个模型Reviews,它有一个静态方法,它接受Story个对象并返回ratings作为整数。如何在Story上对ratings进行索引。

{{ object.story_name }}
{{Reviews.ratings(object)}}

我尝试在模板story_text.txt中调用此方法,但这会导致错误。

django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '(object)'....

修改 我尝试在模板中使用下面,它在构建索引时不会给出任何错误。但是,在使用SearchQuerySet

进行搜索时,我现在如何引用此字段
Reviews.average_start_rating( {{object}} )

2 个答案:

答案 0 :(得分:0)

我很困惑。我不认为您可以在Django中使用{{Reviews.rating object}}等语法和模板引擎。如果有可能,那就是我不知道的。

为什么不在第一时间传递你想在模板中显示的内容?

{{object}}可以呈现,因为它在Context中有对象。例如,如果使用UpdateView(基于类的视图),它将自动包含Context中的对象。

class Example(UpdateView):
    model = yourClass
    form_class = yourFormClass
    template_name = yourhtml
    success_url = URL redirect page after success

由于UpdateView,您可以在yourhtml.html中使用{{object}}。你在网址中给出pk号码,如(?P<pk>[0-9]+)

如果没有UpdateView,你可以这样做

class anotherExample(View):
    def get(self, request, *args, **kwargs):
        render(request, 'yourhtml.html', {"object": Class.objects.get(id=self.kwargs['pk'])})

在表单视图中,您可以使用

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['object'] = Class.objects.get(id= ... )
    return context

我的想法是将故事对象和具有故事对象的FK的评论对象一起传递到上下文中。

答案 1 :(得分:0)

我能够使用haystack高级数据准备工作。 Advanced Data Preparation

使用附加字段可以有一个准备方法。但是,唯一的问题是我可以使用此字段对数据进行排序,但无法使用它进行搜索。

class StoryIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    ratings = indexes.FloatField()

    def prepare_ratings(self, obj):
        return Reviews.ratings(obj)

    def get_model(self):
        return Story