我想显示结合两个模型的搜索结果。我从一种模型而不是另一种模型获得搜索结果。不显示第二个模型数据文件中的字段。不知道我在想什么。
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>
您正确使用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