我的搜索功能有问题。他的任务是按名字搜索电影而且我不知道该怎么写,它的工作原理
我的看法:
class AllMovies(ListView):
model = Movie
template_name = 'All_movies.html'
cats = Category.objects.all()
def get_context_data(self, *args, **kwargs):
cat_menu = Category.objects.all()
search_term = ''
context = super(AllMovies, self).get_context_data(*args, **kwargs)
context["cat_menu"] = cat_menu
return context
def search(request): # wszytskie filmy (lista)
movier = Movie.objects.all()
search_term = ''
if 'search' in request.GET:
search_term = request.GET['search']
movier = Movie.objects.filter(name__icontains=search_term)
paginator = Paginator(movier, 30)
page = request.GET.get('page')
movier = paginator.get_page(page)
get_dict_copy = request.GET.copy()
params = get_dict_copy.pop('page', True) and get_dict_copy.urlencode()
return render(request, 'AllMovies.html',
{'movie': movie, 'params': params, 'search_term': search_term})
这里,应该分割和组合两个功能,但我不知道如何
我的网址:
path("AllMovies/", AllMovies.as_view(), name="AllMovies"),
我的模板:
<form class="form-inline">
<input class="form-control mr-sm-2 " align="middle" type="search" placeholder="Name Movie"
aria-label="Search" name='search' value = "{{ search_term }}">
<button class="btn btn-success my-2 my-sm-0" type="submit">Search</button>
</form>
最重要的是使搜索引擎正常工作。救救我!
这里是一种在ListView中实现搜索以获取queryset参数的方法:
class AllMovies(ListView):
model = Movie
template_name = 'All_movies.html'
cats = Category.objects.all()
if 'search' in request.GET and request.GET['search']:
search_term = request.GET.get('search')
movier = Movie.objects.filter(name__icontains=search_term)
#...
ListView
不会查看方法search
,无论您写什么内容,都不会被触发。
您可以通过覆盖.get_queryset(…)
method [Django-doc]来过滤要返回的对象列表:
.get_queryset(…)