Django. Сортировка по кнопке на странице выдачи результата поиска

Как в Django сделать кнопки сортировка по дате и по релевантности на странице выдачи поиска. Есть модель Article, в которой есть поле "publish" - Дата публикации. В классе Meta стоит сортировка по публикации "-publish", т.е. показывать самые свежие упубликованные статьи. Но на странице выдачи поиска я хотел бы сделать кнопку сортировки по датам. На Stackoverflow пользователи советуют передать параметры сортировки методом "GET" в url, что типо такого:

<form action="{% url 'main:article_search'%}" class = "#" method="GET">
<select class= "#" name="select">
    <option disabled selected> Способ сортировки</option>
        <option value="v1">Дата публикации: по возрастанию</option>
        <option value="v2">Дата публикации: по убыванию</option>
    </select>
    <button class="#">Применить</button>
</form>

Мое представление поиска (views.py):

def article_search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
    form = SearchForm(request.GET)
    if form.is_valid():
        query = form.cleaned_data['query']
        search_vector = SearchVector('title', 'body')
        search_query = SearchQuery(query)
        search_headline = SearchHeadline('body', search_query,
                                         max_fragments=2,
                                         start_sel='<span class="headline">',
                                         stop_sel='</span>')
        if request.user.is_superuser:
            results = Article.published.all().annotate(
                search=search_vector,
                rank=SearchRank(search_vector, search_query)
            ).annotate(headline=search_headline).filter(search=search_query).order_by('-rank')
        else:
            results = Article.published.all().annotate(
                search=search_vector,
                rank=SearchRank(search_vector, search_query)
            ).annotate(headline=search_headline).filter(search=search_query).order_by('-rank').filter(private=False)

sorting_method = request.GET.get('select')
if sorting_method == 'v1':
    results = Article.published.order_by('publish')
elif sorting_method == 'v2':
    results = Article.published.order_by('-publish')

return render(request,
              'main/search.html',
              {'form': form,
               'query': query,
               'results': results})

Но данный способ не работает. Как правильно организовать сортировку в Django по кнопке?


Ответы (0 шт):