如何在 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&page=2
以上是关于如何在 Django 中以升序和降序显示数据?的主要内容,如果未能解决你的问题,请参考以下文章