2016-08-19 4 views
0

У меня есть модель, элемент, с несколькими атрибутами, такими как имя, тип и владелец. В моем шаблоне список элементов повторяется и отображается в таблице. То, что я хотел бы сделать, это изменить порядок элементов в таблице, когда нажата кнопка рядом с головкой таблицы, то есть когда нажата кнопка рядом с именем «Имя», элементы в таблице сортируются по алфавиту. Вот мой шаблон:Сортировка объектов Django по атрибуту в шаблоне

{% extends 'inventory/base.html' %} 

{% block content %} 
<a class="btn btn-default" href="{% url 'inventory:entry' %}">New Item</a> 
<script> 
    jQuery(document).ready(function($) { 
    $(".clickable-row").click(function() { 
     window.location = $(this).data("href"); 
    }); 
}); 
</script> 
{% if item_list %} 
    <table> 
     <tr> 
      <th>Name <button class="btn btn-default" href="order_table"></button></th> 
      <th>Type <button class="btn btn-default" href="order_table"></button></th> 
      <th>Barcode/Model No. <button class="btn btn-default" href="order_table"></button></th> 
      <th>Owner <button class="btn btn-default" href="order_table"></button></th> 
      <th>Edit <button class="btn btn-default" href="order_table"></button></th> 
     </tr> 
     {% for item in item_list %} 
      <tr class="clickable-row itemrow" data-href="{% url 'inventory:details' item.id %}"> 
       <td>{{ item.name }}</td> 
       <td>{{ item.itemType }}</td> 
       <td>{{ item.barcode }}</td> 
       <td>{{ item.owner.username }}</td> 
       <td><a href="{% url 'inventory:edit' item.id %}" class="btn btn-default">Edit</a></td> 
      </tr> 
     {% endfor %} 
    </table> 
{% endif %} 
{% endblock %} 
+0

У вас есть два варианта; используйте Javascript для сортировки элементов непосредственно на странице или передачи параметров сортировки на сервер и повторения запроса там с сортировкой. –

+0

Если мне нужно передать параметр сортировки на сервер, есть ли способ перезагрузить только часть таблицы страницы, а не всю страницу? – Stalfurion

+0

Конечно, вы можете сделать это с помощью Ajax. –

ответ

1

вместо кнопки использовать ссылку и передать параметр к виду:

<th><a href="{{ url('myurl') }}?sort=name">Name </a></th> 

в Джанго просмотра вы можете получить параметр сортировки с помощью: request.GET.get('sort', 'your_default_sort') и использовать его заказать запрос. Если вы используете FBV изменить его вручную в функции, и если вы используете ОЦК просто переопределить get_ordering() метод вашего класса

однако, было бы мне намного проще с клиентской стороны решения, как datatables

Надеюсь, что это поможет

Смежные вопросы