如何在 Django 中以升序和降序显示数据?

Posted

技术标签:

【中文标题】如何在 Django 中以升序和降序显示数据?【英文标题】:How to display Data in Ascending and Descending Order in Django? 【发布时间】:2020-12-26 14:41:54 【问题描述】:

我正在 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']

【问题讨论】:

【参考方案1】:

你可以这样试试:

# 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 中的链接:

<a onClick="window.location.href=window.location.pathname+'?order_by=email&'+window.location.search.substring(1)">

我正在使用内联 JavaScript 来解决这个问题,你可以为此编写一个适当的函数。

【讨论】:

它给了我这个错误...UserFilter对象没有属性order_by...我也在使用分页...如果需要请告诉我我将提交我的UserFilter代码也 请检查我更新的问题,我已经更新了filters.py 文件和分页...我的filters.py 文件中有多个字段... 能否请您也使用分页更新您​​的答案... 代码本身不应导致任何分页问题。您当前的分页有什么问题吗?如果有错误,请与 stacktrace 分享错误。谢谢 这很完美,但是当我点击next page 时,它会被分页 URL 取代。例如,我在订购后的当前 URL 是 127.0.0.1/customer/?order_by=email,但是当我点击 page 2 时使用分页,然后替换为127.0.0.1/customer/?page=2,但应该是127.0.0.1/customer/?order_by=email&amp;page=2

以上是关于如何在 Django 中以升序和降序显示数据?的主要内容,如果未能解决你的问题,请参考以下文章

java中,如何实现集合的升序和降序排列

如何隐藏排序指示符并显示我们自己的指示符图标以在 Ag-Grid 中升序和降序排序

如何按升序和降序对列进行排序?

如何在objective c中形成票价升序和降序形式数组

如何实现JSP列表升序或者降序

如何在 C++ 中按向量进行升序和降序排序