django-使用链从两个模型中搜索视图

django-使用链从两个模型中搜索视图,django,chain,Django,Chain,我想显示结合两个模型的搜索结果。我从一个模型得到搜索结果,而不是从另一个模型得到。不显示第二个模型数据文件中的字段。不知道我错过了什么 class SearchResultsView(ListView): template_name = 'searchresults.html' def get_queryset(self): # new query = self.request.GET.get('q') meta_list = Metadatafor

我想显示结合两个模型的搜索结果。我从一个模型得到搜索结果,而不是从另一个模型得到。不显示第二个模型数据文件中的字段。不知道我错过了什么

class SearchResultsView(ListView):
  template_name = 'searchresults.html'

    def get_queryset(self): # new
        query = self.request.GET.get('q')
        meta_list = Metadataform.objects.filter(
            Q(id__icontains=query) | Q(Authors_Name__icontains=query) | Q(Affliations__icontains=query) | Q(Methods__icontains=query) | Q(Instruments__icontains=query) | Q(Software__icontains=query)| Q(Models__icontains=query)| Q(Device__icontains=query)
        )

        dataset_list = uploadmeta.objects.filter(Q(datafile__icontains=query)
        )

        object_list = chain(meta_list, dataset_list)
        return object_list


搜索结果
元ID
作者
下载
{%if对象\列表%}
{对象中的%u列表%}
{{a.Authors_Name}}
{{a.datafile}
{%endfor%}
{%else%}
{%endif%}

使用
itertools.chain
函数将多个查询集连接在一起是正确的

有两件事可以尝试:

  • 检查
    dataset\u list=uploadmeta.objects.filter(Q(datafile\uu icontains=query))的结果。
    此查询的结果可能实际上没有找到任何结果。这意味着没有结果(检查数据)

  • 尝试删除
    模型
    类属性。尝试删除
    SearchResultsView
    中的模型定义


  • 请检查
    dataset\u list=uploadmeta.objects.filter(Q(datafile\uu icontains=query))
    的结果是否返回您期望的结果。这可能是一个数据问题。谢谢,在那个查询中有数据没有显示上升趋势。我试了你的两个观点。尽管如此,我仍然看不到存在的数据,因此必须获取这些数据。如果这个数据文件是一个foreignkey,这会是一个问题吗?我基本上想从连接它们的两个表中获取字段。。。像这样的sql选择“SSDatabase\u metadataform”。*,“SSDatabase\u uploadmeta”。“SSDatabase\u metadataform”中的“datafile”在“SSDatabase\u metadataform”中内部连接“SSDatabase\u uploadmeta”。“id”=“SSDatabase\u uploadmeta”。“path\u id”按“id”顺序排列。你确定数据存在吗?马特Seymour:你能帮我一下吗。搜索工作正常,显示来自一个模型的数据,但不从第二个模型获取相应的数据。你能告诉我我错过了什么吗?代码是一样的,我没有改变任何东西
    
    <h1>Search Results</h1>
    
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>Meta ID</th>
                    <th>Author</th>
                    <th>Download</th>
                </tr>
            </thead>
            <tbody>
              {% if object_list %}
    
              {% for a in object_list %}
    
    
                <tr>
                    <td>{{ a.Authors_Name }}</td>
                    <td>  {{ a.datafile }} </td>
                </tr>
    
                {% endfor %}
    
              {% else %}
              {% endif %}
            </tbody>
        </table>
    
    class SearchResultsView(ListView):
        template_name = 'searchresults.html'
    
        def get_queryset(self): # new
            query = self.request.GET.get('q')
            meta_list = Metadataform.objects.filter(
                Q(id__icontains=query) | Q(Authors_Name__icontains=query) | Q(Affliations__icontains=query) | Q(Methods__icontains=query) | Q(Instruments__icontains=query) | Q(Software__icontains=query)| Q(Models__icontains=query)| Q(Device__icontains=query)
            )
    
            dataset_list = uploadmeta.objects.filter(Q(datafile__icontains=query)
            )
    
            object_list = list(chain(meta_list, dataset_list))
            return object_list