如何在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 来解决这个问题,你可以为此编写一个合适的函数。