如何解决Django跨多个模型搜索/过滤
在我的Django网站中,我试图在主页上创建一个搜索栏,以返回存储在两种不同模型(文章,乔布斯)中的结果
当前,当我使用以下代码进行搜索时会得到一个空结果集:
在models.py中,
class Articles(models.Model):
objects = None
news_title = models.CharField(db_column="title",max_length=400)
news_url = models.URLField(db_column="link",max_length=400)
image_link = models.CharField(db_column="image",max_length=400)
published_date = models.CharField(db_column="published_date",max_length=400)
class Meta:
managed = False
db_table = "articles"
def __str__(self):
return self.news_title
class Jobs(models.Model):
objects = None
company = models.CharField(db_column='company',max_length=100)
job_title = models.CharField(db_column='job_title',max_length=300)
experience = models.CharField(db_column='experience',max_length=300)
edu_level = models.CharField(db_column='edu_level',max_length=50)
class Meta:
managed = False
db_table = "job_list"
def __str__(self):
return self.job_title
在views.py中,
class SearchView(ListView):
template_name = 'blog/search_results.html'
def get_queryset(self):
request = self.request
query = request.GET.get('q','')
articles_results = Articles.objects.filter(Q(news_title__icontains=query))
jobs_results = Jobs.objects.filter(Q(job_title__icontains=query))
context={
'articles':articles_results,'jobs':jobs_results,}
return render(request,'blog/search_results.html',context)
在main_view.html中,我使用以下代码创建搜索栏:
<form action="{%url 'search_results' %}" method="get" values="{{request.GET.q}}" class="search-jobs-form">
<div class="row mb-5">
<input name="q" type="text" values="{{request.GET.q}}" placeholder="search">
</div>
<button type="submit">Search</button>
</form>
在search_results.html中,
{% block content %}
{% for job in jobs %}
<h5>{{job.job_title}}</h5>
<p>{{job.company}}</p>
{% endfor %}
{% for article in articles %}
<h5>{{article.news_title}}</h5>
<p>{{article.published_date}}</p>
{% endfor %}
{% endblock %}
解决方法
我最终没有在views.py中使用类SearchView(ListView)并使它工作
这是我使用的代码
#index.html Search Bar
<form method="get" class="search-jobs-form" action="{% url 'main_search'%}">
{% csrf_token %}
<input type="text" placeholder="Job title,Company..." name="search_query">
<button type="submit" class="btn btn-info btn-lg btn-block text-white btn-search">Search Job</button>
</form>
在视图中,
#views.py
def main_search(request):
q = request.GET['search_query']
articles = Articles.objects.filter(news_title__icontains=q)
jobs = Jobs.objects.filter(Q(job_title__icontains=q) | Q(company__icontains=q))
return render(request,"blog/main_search.html",{'articles':articles,'jobs':jobs,'page_name':'Search Results','q':q})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。