У меня проблема с функцией поиска в django - PullRequest
1 голос
/ 29 мая 2020

У меня проблема с функцией поиска. Ему поручено искать фильмы по названию, и я не знаю, как это написать, и это работает

Мои просмотры:

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>

Главное, чтобы поисковик работал. Помогите мне!

Ответы [ 2 ]

1 голос
/ 29 мая 2020

ListView не смотрит на метод search, независимо от того, что вы пишете, он не будет запущен.

Вы можете отфильтровать список возвращаемых объектов, переопределив .get_queryset(&hellip;) метод [Django -doc] :

class AllMovies(ListView):
    model = Movie
    template_name = 'All_movies.html'
    paginate_by= 30
    context_object_name = 'movie'

    def get_context_data(self, *args, **kwargs):
        get_dict_copy = request.GET.copy()
        get_dict_copy.pop('page', True)
        return super().get_context_data(
            *args,
            **kwargs,
            cat_menu=Category.objects.all(),
            search_term=self.request.GET.get('search', '')
            params=get_dict_copy.urlencode()
        )

    def <b>get_queryset</b>(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if 'search' in self.request.GET:
            search_term = self.request.GET['search']
            return qs.filter(name__icontains=search_term)
        return qs
0 голосов
/ 29 мая 2020

Вот способ реализовать поиск в вашем ListView, получив параметр вашего набора запросов:

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)

    #...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...