python - 跨多个模型的 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})
推荐阅读
- javascript - 材质 UI DatePicker 显示错误的日期
- python - 使用python将HTML表格导出到excel而不刷新页面
- php - 为什么是一个简单的“goto $argv[1];” 不工作?
- javascript - Jest 不会从 vue 文件中收集覆盖率(nuxt)
- python - 图片未上传。我想上传图片并将其保存到我提供媒体根目录和媒体网址的数据库中
- asp.net-core - IdentityServer4 从外部提供者创建访问令牌
- android-studio - 模拟器无法启动
- python - 从文本文件中读取点数据并返回字典
- wordpress - 请告诉wordpress phpmyadmin的config.inc.php文件在哪里
- python - 如何在python中将不同的图像保存到不同的目录中?