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