Джанго - нумерация страниц и сортировка - PullRequest
0 голосов
/ 03 июля 2018

Я хочу сделать вид, который отображает список объектов модели в таблице. Я хочу добавить функцию сортировки.

Есть возможность сделать сортировку как здесь: https://codepen.io/imarkrige/pen/vgmij в Django?

Я имею в виду стрелки в именах столбцов. Где при нажатии меняется asc на desc. Следующее - сохранить отсортированную таблицу при смене страницы.

То, что я сейчас сделал, это поле сортировки, но оно не сохраняется при смене страниц.

Мой базовый общий вид содержит:

{% block pagination %}
    {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="{{ request.path }}?page= {{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
        </div>
    {% endif %}
{% endblock %}

мой взгляд:

class VotesList(generic.ListView):
    model = Vote
    template_name = 'votes-list.html'
    paginate_by = 5

    def get_queryset(self):
        order = self.request.GET.get('orderby', 'created_date')
        new_context = Vote.objects.order_by(order)

        return new_context

    def get_context_data(self, **kwargs):
        context = super(VotesList, self).get_context_data(**kwargs)
        context['orderby'] = self.request.GET.get('orderby', 'created_date')

        return context

Мой шаблон:

{% block content %}
    {% if vote_list %}

<form method="get" action="{% url 'votes-list' %}">
    <p>Sortuj: <input type="text" value={{orderby}} name="orderby"/></p>
    <p><input type="submit" name="submit" value="Zatwierdź"/></p>
</form>
        <table id="vote_list">
            <thead>
                <tr>
                    <th>Właściciel</th> 
                    <th>Grupa</th> 
                    <th>Rada</th> 
                    <th>Status</th> 
                    <th>Pytanie</th>
                    <th>Odp A</th>
                    <th>Odp B</th>
                    <th>Odp C</th>
                    <th>Odp D</th>
                    <th>Odp E</th>
                    <th>Odp F</th> 
                    <th>Data utworzenia</th>
                    <th>Data rozpoczęcia</th>
                    <th>Data zakończenia</th>
                </tr>
            </thead>
            <tbody>
                {% for vote in vote_list %}
                    <tr>
                        <td>{{ vote.user }}</td>
                        <td>{{ vote.group }}</td>
                        <td>{{ vote.council }}</td>
                        <td>{{ vote.get_status }}</td>
                        <td><a href="{{ vote.get_absolute_url }}">{{ vote.question }}</a></td>
                        <td>{{ vote.ans_a }}</td>
                        <td>{{ vote.ans_b }}</td>
                        <td>{{ vote.ans_c }}</td>
                        <td>{{ vote.ans_d }}</td>
                        <td>{{ vote.ans_e }}</td>
                        <td>{{ vote.ans_f }}</td>
                        <td>{{ vote.created_date }}</td>
                        <td>{{ vote.begin_date }}</td>
                        <td>{{ vote.finish_date }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>

    {% else %}
        <p>Brak głosowań!</p>
    {% endif %}
{% endblock %}

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать javascript для выполнения сортировки, особенно datatablejs может помочь с этим. Однако сохранение состояния отсортированного списка между изменениями страницы, вероятно, должно быть сделано с помощью файлов cookie. Это, вероятно, проще, чем использование ajax-запросов для сохранения пользовательских настроек при «сортировке» как части пользовательской модели.

Вот ссылка на то, как сделать куки: https://www.quirksmode.org/js/cookies.html

Что вы, вероятно, хотите сделать, это сохранить порядок сортировки в cookie, а затем прочитать его при загрузке страницы. После прочтения вы можете установить порядок сортировки таким образом.

...