Как использовать поисковый фильтр, если в пути URL используется слаг - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь добавить фильтры поиска и упорядочения на страницу, которая динамически создается с <slug:slug>. Проблема заключается в том, что, как только я добавляю свой фильтр упорядочения, я получаю:

Обратное для 'фильтрованного по результатам теста' без аргументов, которые не найдены. Попробован 1 шаблон (ов): ['tests \ / results \ / (? P [-a-zA-Z0-9 _] +) \ / $']

Если я правильно читаю он говорит мне, что не может определить страницу, когда фильтр пуст. Проблема в том, что когда на странице нет фильтра упорядочения HTML, он работает просто отлично.

Кнопка Order_by HTML:

<!--Order By Button-->
        <form action="{% url 'quiz-results-filtered' %}" 
              class="small-form" 
              method="get">
            <input name="ordering"
                   type="hidden"
                   value="-end">
            <input class="btn btn-link"
                   type="submit"
                   value="Date: most recent">
        </form>

URL:

    path('tests/', include([
        path('results/<slug:slug>/', views.QuizMarkingFilteredList.as_view(), name='quiz-results-filtered'),
...

Views.py (хотя это и не имеет значения, некоторые люди заставили без необходимости просить об этом):

class QuizMarkingFilteredList(PermissionRequiredMixin, LoginRequiredMixin, QuizMarkerMixin, ListView):
    model = Sitting
    template_name = 'quiz/sitting_filtered_list.html'
    permission_required = ('quiz.view_sittings',)
    permission_denied_message = 'User does not have permissions to view quiz sittings.'

    def get_ordering(self, *args, **kwargs):
        ordering = self.request.GET.get('ordering', 'end')
        return ordering

    def get_queryset(self):
        queryset = super(QuizMarkingFilteredList, self).get_queryset()
        queryset = queryset.filter(complete=True)
        queryset = queryset.filter(user__supervisor__exact=self.request.user)
        queryset = queryset.filter(quiz__url=self.kwargs['slug'])

        ordering = self.get_ordering()

        if ordering and isinstance(ordering, str):
            ordering = (ordering,)
            queryset = queryset.order_by(*ordering)
        return queryset

This ошибка не возникает при удалении фильтра HTML Order_by со страницы .

Я уверен, что это довольно просто, но я его не вижу. Мысли о том, почему?

Заранее спасибо! = D

1 Ответ

1 голос
/ 08 января 2020

Проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь использовать URL, «фильтрованный по результатам викторины», но для этого требуется аргумент ключевого слова slug, который вы не передаете. Вам необходимо передать аргумент в URL-тег *

{% url 'quiz-results-filtered' slug=slug %}

. Удаление атрибута action из тега формы приведет к тому, что форма будет отправлена ​​на текущий URL-адрес. уже на правильном пути

<form class="small-form">

Вам также не нужно указывать method="get", так как это значение по умолчанию

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