如何在Django中按升序和降序显示数据?
How to display Data in Ascending and Descending Order in Django?
我正在 Django 中创建我的自定义管理面板,我不想使用 Django 默认管理面板,但我想在 dajngo 中排序过滤器,如果用户单击 email
,则电子邮件应该在ascending
顺序,如果用户再次单击电子邮件,则 emails
将按降序排列,请告诉我如何做。
这是我的 models.py
文件...
class Model1(models.Model):
email= models.Charfield(blank=True)
phone= models.Charfield(blank=True)
这是我的 views.py
文件...
def display_data(request):
test_display=UserFilter(request.GET,
queryset=Model1.objects.select_related('customer__user))
paginator = Paginator(test_display.qs, 10)
page_number = request.GET.get('page')
testdisplay = paginator.get_page(page_number)
return render(request, 'page.html', {'test_display':test_display, 'testdisplay':testdisplay})
这是我的 page.html
文件
<th><a href="javascript:void()">Email (CLick on this field)</a></th>
{% for i in testdisplay %}
<tr>
<td>
{{i.email}}
</td>
</tr>
{% endfor %}
这是我的 filters.py
文件代码...
calss UserFilter(django_filters.FilterSet):
class Meta:
models= Model1
fields ['type','status']
你可以这样试试:
# template
<th><a href="?order_by=email">Email (CLick on this field)</a></th>
# view
def display_data(request, id):
test_display=Model1.objects.all()
order_by = request.GET.get('order_by', None)
if order_by:
test_display = test_display.order_by(order_by)
return render(request, 'page.html', {'test_display':test_display})
我在这里发送一个 URL 查询字符串参数 order_by
。在视图中,它将从 request.GET
获取查询字符串参数,然后相应地对该查询集进行排序。
更新
在documentation的基础上你可以添加OrderingFilter
:
from django_filters import FilterSet, OrderingFilter
class UserFilter(FilterSet):
order_by = OrderingFilter(fields=(('email','email')))
# rest of the code
并更新 HTML 中的 link:
<a onClick="window.location.href=window.location.pathname+'?order_by=email&'+window.location.search.substring(1)">
我正在使用内联 JavaScript 来解决这个问题,你可以为此编写一个合适的函数。
我正在 Django 中创建我的自定义管理面板,我不想使用 Django 默认管理面板,但我想在 dajngo 中排序过滤器,如果用户单击 email
,则电子邮件应该在ascending
顺序,如果用户再次单击电子邮件,则 emails
将按降序排列,请告诉我如何做。
这是我的 models.py
文件...
class Model1(models.Model):
email= models.Charfield(blank=True)
phone= models.Charfield(blank=True)
这是我的 views.py
文件...
def display_data(request):
test_display=UserFilter(request.GET,
queryset=Model1.objects.select_related('customer__user))
paginator = Paginator(test_display.qs, 10)
page_number = request.GET.get('page')
testdisplay = paginator.get_page(page_number)
return render(request, 'page.html', {'test_display':test_display, 'testdisplay':testdisplay})
这是我的 page.html
文件
<th><a href="javascript:void()">Email (CLick on this field)</a></th>
{% for i in testdisplay %}
<tr>
<td>
{{i.email}}
</td>
</tr>
{% endfor %}
这是我的 filters.py
文件代码...
calss UserFilter(django_filters.FilterSet):
class Meta:
models= Model1
fields ['type','status']
你可以这样试试:
# template
<th><a href="?order_by=email">Email (CLick on this field)</a></th>
# view
def display_data(request, id):
test_display=Model1.objects.all()
order_by = request.GET.get('order_by', None)
if order_by:
test_display = test_display.order_by(order_by)
return render(request, 'page.html', {'test_display':test_display})
我在这里发送一个 URL 查询字符串参数 order_by
。在视图中,它将从 request.GET
获取查询字符串参数,然后相应地对该查询集进行排序。
更新
在documentation的基础上你可以添加OrderingFilter
:
from django_filters import FilterSet, OrderingFilter
class UserFilter(FilterSet):
order_by = OrderingFilter(fields=(('email','email')))
# rest of the code
并更新 HTML 中的 link:
<a onClick="window.location.href=window.location.pathname+'?order_by=email&'+window.location.search.substring(1)">
我正在使用内联 JavaScript 来解决这个问题,你可以为此编写一个合适的函数。