有没有一种方法可以从get_queryset返回两个合并的列表,而不仅仅是查询集?

时间:2020-09-24 17:42:09

标签: python django

我正在使用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 """

1 个答案:

答案 0 :(得分:0)

您可以从get_queryset返回任何可迭代的。您可以返回zip(qs,fake_results),但应将其正确解压缩。