django-使用链的两个模型的Searchview

问题描述 投票:0回答:1

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

class SearchResultsView(ListView):
    #model = Metadataform
    model = Metadataform.objects.raw('SELECT "SSDatabase_metadataform".*, "SSDatabase_uploadmeta"."datafile" from "SSDatabase_metadataform" INNER JOIN "SSDatabase_uploadmeta" ON "SSDatabase_metadataform"."id" = "SSDatabase_uploadmeta"."path_id" order by "id"')

    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


<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>
django chain
1个回答
0
投票

您正确使用itertools.chain功能。我相信您的问题是model类属性的定义。尝试删除SearchResultsView中的模型定义。

    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
© www.soinside.com 2019 - 2024. All rights reserved.