【问题标题】:How to display Data in Ascending and Descending Order in Django?如何在 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']

【问题讨论】:

    标签: python django django-views django-templates django-filter


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2023-03-16
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多