gpt4 book ai didi

python - 使用 ListView 的 Django 反向排序

转载 作者:行者123 更新时间:2023-11-28 22:34:19 24 4
gpt4 key购买 nike

我已经在通用 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

在我的模板中:

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

我希望有人能提供帮助。

最佳答案

您需要使用另一个变量来确定 asc/desc 顺序。根据当前选择的内容,模板应交替链接。在 View 中,您按 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 %}

关于python - 使用 ListView 的 Django 反向排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com