我在Django搜索功能中遇到问题

问题描述 投票:1回答:2

我的搜索功能有问题。他的任务是按名字搜索电影而且我不知道该怎么写,它的工作原理

我的看法:

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>

最重要的是使搜索引擎正常工作。救救我!

django search
2个回答
0
投票

这里是一种在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)

    #...

0
投票

ListView不会查看方法search,无论您写什么内容,都不会被触发。

您可以通过覆盖.get_queryset(…) method [Django-doc]来过滤要返回的对象列表:

.get_queryset(…)
© www.soinside.com 2019 - 2024. All rights reserved.