我有一个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}} )
答案 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