Python Django Haystack:如何索引另一个类中的字段
我有一个django模型Python Django Haystack:如何索引另一个类中的字段,python,django,
elasticsearch,django-haystack,Python,Django,
elasticsearch,Django Haystack,我有一个django模型故事,我能够成功地使用模板对其进行索引。但是,还有另一个模型Reviews,它有一个静态方法,该方法接受Story对象,并将ratings作为整数返回。我如何在评级上为故事编制索引 {{ object.story_name }} {{Reviews.ratings(object)}} 我试图在templatestory\u text.txt中调用此方法,但这导致了一个错误 django.template.exceptions.TemplateSyntaxError: C
故事
,我能够成功地使用模板对其进行索引。但是,还有另一个模型Reviews
,它有一个静态方法,该方法接受Story
对象,并将ratings
作为整数返回。我如何在评级
上为故事
编制索引
{{ object.story_name }}
{{Reviews.ratings(object)}}
我试图在templatestory\u text.txt
中调用此方法,但这导致了一个错误
django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '(object)'....
编辑:
我试着在模板中使用下面的代码,它在构建索引时没有给出任何错误。但是在使用SearchQuerySet
Reviews.average_start_rating( {{object}} )
我很困惑。我不认为您可以在Django的模板引擎中使用类似{{Reviews.rating object}}的语法。如果可能的话,这是我不知道的 为什么不首先在上下文中传递要在模板中显示的内容 {{object}}无法呈现,因为它在上下文中有对象。例如,如果您使用UpdateView(基于类的视图),它会自动在上下文中包含对象
class Example(UpdateView):
model = yourClass
form_class = yourFormClass
template_name = yourhtml
success_url = URL redirect page after success
由于UpdateView,您可以在html.html中使用{{{object}}
。您在url配置中给出pk号,如(?P[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
我的想法是将story对象和review对象传递到上下文中,其中包含story对象的FK。我能够使用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
尝试
{{Reviews.ratings object}}
或args=(object,)
不工作,失败时出现同样的错误,无法解析剩余部分
您可以显示您的评级
代码吗?我建议您试用Django上下文处理器。我在haystack模板中使用的模板,我找到了一种添加索引字段的方法。最终将添加答案。做一些研究,我明白了。那么,我完全误解了你的问题。我会检查django haystack和你的答案!