【发布时间】:2020-04-10 03:32:28
【问题描述】:
在我的 Django 网站中,我有一个用户页面,其中列出了用户添加到数据库中的所有项目。有一个搜索表单供用户搜索自己的项目。问题是搜索表单不起作用。我对如何过滤数据库有点困惑,因为首先我过滤了所有项目以便只显示用户添加的项目,然后我应该根据用户输入过滤这些项目。希望有人能帮帮我,谢谢!
'def look()' 是我尝试过但不起作用的方法
Views.py
class userListView(ListView):
model = Info
template_name = 'search/user.html'
paginate_by = 10
def get_queryset(self):
qs = super().get_queryset()
qt = qs.filter(utente=self.request.user)
return qt
def look(self, request, *args, **kwargs):
print('FORM POSTED WITH {}'.format(request.POST['cerca']))
srch = request.POST.get('cerca')
if srch:
sr = Info.objects.filter(srch = Subquery(qt))
if sr:
return render (self.request, 'search/user.html', {'sr':sr})
else:
return render(self.request, 'search/user.html')
else:
return render(self.request, 'search/user.html')
用户模板html
<div class="add">
<div class="posted">
<div class="head">
<h2> YOUR LIST </h2>
<div class="form">
<form method="post" action="{% url 'user' %}">
{%csrf_token%}
<input type="text" name="cerca" class= "form-control" placeholder=" Type Album or Band Name...">
<!-- <button type="submit" name="submit">Search</button> -->
</form>
</div>
</div>
<!-- Inserire il database dell'utente registrato -->
{% if object_list %}
{% for o in object_list %}
<div class="container_band">
<div class=album_band>
<!-- insert an image -->
{%if o.cover%}
<img src= "{{o.cover.url}}" width="100%">
{%endif%}
</div>
<div class="info_band">
<!-- insert table info -->
<table>
<tr><th><h3>{{o.band}}</h3></th></tr>
<tr><td> Anno: </td><td> {{o.anno}} </td></tr>
<tr><td> Disco: </td><td> {{o.disco}} </td></tr>
<tr><td> Etichetta: </td><td> {{o.etichetta_d}} </td></tr>
<tr><td> Matrice: </td><td> {{o.matrice}} </td></tr>
</table>
</div>
模板:
<a href="{%url 'searches'%}" >Band: {{ request.POST.srh }}</a><br/>
<a href="{%url 'searches'%}" >Album: {{ request.POST.srh }}</a>
【问题讨论】:
-
只需实现
get_queryset()中的所有内容。您只需要返回由搜索参数过滤的相同查询集。您的方法look永远不会被调用,因为 Django 在运行ListView时不会调用方法look。