2016-08-20 4 views
1

ich Ordnung in einem allgemeinen Listview implementiert haben:Django Reverse Bestellung mit Listview

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

    ordering = 'car_id_internal' 

    def get_ordering(self): 
     return self.request.GET.get('ordering', 'car_id_internal') 

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

Und in meiner Vorlage:

<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> 

Das funktioniert gut, aber ich würde für Benutzer möchte in der Lage sein Umkehren Sie die Reihenfolge von aufsteigend zu absteigend, wenn Sie erneut auf die Spaltenüberschrift klicken. Ist das mit Django möglich? Ich benutze Django 1.9.

Ich hoffe, dass jemand helfen kann.

Antwort

2

Sie müssen eine andere Variable verwenden, um die Reihenfolge asc/desc zu bestimmen. Abhängig davon, welche gerade ausgewählt ist, sollte die Vorlage die Links wechseln. In der Ansicht kehren Sie die Reihenfolge um adding a dash vor dem Feldnamen um. Versuchen Sie Folgendes:

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 

Und die Vorlage:

<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

Perfect. Ich danke dir sehr! – Wessi