我已经在我的网站上设置了 Haystack 搜索。搜索工作正常,我真的很喜欢。我在添加额外上下文时遇到问题。我想将 3 个模型中的对象“推送”到我的模板。第一个对象是我的搜索结果,另外两个应该是附加的。我的问题是:如何从其他模型传递对象。这是我的search_indexes.py文件:
import datetime
from haystack.indexes import *
from haystack import site
from filmy.models import Video, Page, Category
class VideoIndex(SearchIndex):
text = CharField(document=True, use_template=True)
title = CharField(model_attr='title')
description = CharField(model_attr='description')
date = DateTimeField(model_attr='date')
def index_queryset(self, using=None):
# """Used when the entire index for model is updated."""
return Video.objects.filter(date__lte=datetime.datetime.now())
def extra_context(self):
return {
'categories': Category.objects.all().order_by('-name'),
'list_of_pages': Page.objects.all().order_by('id'),
}
site.register(Video, VideoIndex)
搜索工作正常,但我想要一个所有类别的列表和所有页面的列表(我在 base.html 模板中使用它们。我的解决方案不起作用。我尝试了第二个子类:
import datetime
from haystack.indexes import *
from haystack import site
from filmy.models import Video, Page, Category
class VideoIndex(SearchIndex):
text = CharField(document=True, use_template=True)
title = CharField(model_attr='title')
description = CharField(model_attr='description')
date = DateTimeField(model_attr='date')
def index_queryset(self, using=None):
# """Used when the entire index for model is updated."""
return Video.objects.filter(date__lte=datetime.datetime.now())
site.register(Video, VideoIndex)
class VideoSearchIndex(VideoIndex):
def extra_context(self):
extra = super(VideoSearchIndex, self).extra_context()
extra['categories'] = Category.objects.all().order_by('-name')
extra['list_of_pages'] = Page.objects.all().order_by('id')
return extra
但是这段代码也不起作用。我不知道如何在我的搜索结果中轻松实现其他模型。谢谢你的帮助!