【发布时间】:2020-12-14 19:08:48
【问题描述】:
在我的 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 %}
【问题讨论】:
-
为什么要将默认管理器 (
objects) 设置为None? -
我没有为这个模型设置一个经理。在这种情况下我需要一个经理吗?在我们网站的其他页面中,我没有使用过滤功能,我仍然可以调用该对象...
-
不确定“调用对象”是什么意思,但您必须有一个管理器才能使用大多数 ORM 功能。 Django 为您提供了一个名为
objects的默认管理器。你为什么首先将它设置为None?
标签: python django web search filter