2016-08-20 7 views
1

で注文する逆Djangoは、私は、一般的なリストビューで順序を実装しているリストビュー

<thead> 
    <tr> 
     <th><a href="{% url 'car_list' %}?ordering=car_id_internal">Internal car ID</a></th> 
     <th><a href="{% url 'car_list' %}?ordering=type">Type</a></th> 
     <th><a href="{% url 'car_list' %}?ordering=brand">Brand</a></th> 
    </tr> 
</thead> 

これは正常に動作します、しかし、私のことができるようにするために、ユーザーのための希望します再度列ヘッダーをクリックすると、昇順から降順に並べ替えられます。それはDjangoで可能ですか?私はDjango 1.9を使用しています。

誰かが助けてくれることを願っています。

答えて

2

昇順/降順を決定するために別の変数を使用する必要があります。現在選択されているテンプレートに応じて、テンプレートはリンクを変更する必要があります。ビューでは、フィールド名の前にadding a dashで順序を逆にします。次のことを試してみてください。

class CarList(ListView): 
    model = Car 
    paginate_by = 30 

    ordering = 'car_id_internal' 
    def get_ordering(self): 
     self.order = self.request.GET.get('order', 'asc') 
     selected_ordering = self.request.GET.get('ordering', 'car_id_internal') 
     if self.order == "desc": 
      selected_ordering = "-" + selected_ordering 
     return selected_ordering 

    def get_context_data(self, *args, **kwargs): 
     context = super(CarList, self).get_context_data(*args, **kwargs) 
     context['current_order'] = self.get_ordering() 
     context['order'] = self.order 
     return context 

テンプレート:

<table> 
<tr> 
    <th><a href="{% url 'car_list' %}?ordering=car_id_internal&order={% if order == 'desc' %}asc{% else %}desc{% endif %}">Internal car ID</a></th> 
    <th><a href="{% url 'car_list' %}?ordering=type&order={% if order == 'desc' %}asc{% else %}desc{% endif %}">Type</a></th> 
    <th><a href="{% url 'car_list' %}?ordering=brand&order={% if order == 'desc' %}asc{% else %}desc{% endif %}">Brand</a></th> 
</tr> 
{% for car in object_list %} 
<tr> 
    <td>{{car.id}}</td> 
    <td>{{car.type}}</td> 
    <td>{{car.brand}}</td> 
</tr> 
{% endfor %} 

+0

パーフェクト。どうもありがとうございます! – Wessi

関連する問題