我正在使用Django生成对象的generic.ListView。我也在使用Elastic Search搜索结果。我的问题是如何将查询集与JSON对象的有序列表结合在一起? get_queryset
仅允许我返回一个变量(查询集),但我需要get_context_data
才能访问查询集和搜索结果的关联元数据。
我创建了一个下面的hack,但可以找到更好的解决方案。
def get_queryset(self):
# just get 2 documents, in my actual code the queryset is generated by a list of IDs
# from the Elastic Search query
qs = Document.objects.all()[:2]
# create some fake search results, in my actual code I get a similar looking JSON
# objects with metadata like result score or highlighted snippets from the search corpus
fake_results = [
{ 'meta': {
'highlight': {
'title': ['ABC'],
'content': ['123', '456'],
}
}
},
{ 'meta': {
'highlight': {
'content': ['789'],
}
}
}
]
# this is a hack (i think) but need to merge the metadata from search results into the queryset object
for doc, result in zip(qs, fake_results):
if 'highlight' in result['meta']:
doc.snippet = result['meta']['highlight']
return qs
def get_context_data(self, **kwargs):
""" do stuff with the modified queryset """
答案 0 :(得分:0)
您可以从get_queryset返回任何可迭代的。您可以返回zip(qs,fake_results),但应将其正确解压缩。