在djang中按升序/降序排序筛选的列表

2024-09-28 01:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Django创建了一个员工管理系统。我做了一个过滤方法,它是基于从下拉菜单中选择的一个选项和一个文本输入。过滤工作正常。在第一页,它给出了整个员工列表,可以按升序和降序显示。在同一页上给出了过滤方法。过滤后的数据显示在另一页中。现在,我想在过滤数据页面上给出一个按钮,点击该按钮,数据将以升序/降序显示。我在升序和降序视图中分别列出了员工的升序和降序功能。如何将其用于此功能。我将把我的代码粘贴在这里。请帮助我找到一个解决方案,因为我是django编程新手。
我已经给出了两个单独的图像,用于升序和降序。我希望这样:按升序单击1个图像列表;单击其他图像按降序列出它。在

过滤器()

def filter(request):
    val3='' 
    if request.GET.has_key('choices'):
        val2=request.GET.get('choices')
    if request.GET.has_key('textField'):
        val3=request.GET.get('textField')
    if request.POST:
        val2=request.POST.get('choices')    
        val3=request.POST.get('textField')
    if val2=='Designation':                
        newData = EmployeeDetails.objects.filter(designation=val3) 
        flag=True 
    elif val2=='Name':
        newData = EmployeeDetails.objects.filter(userName__icontains=val3)
        flag=True 
    elif val2=='EmployeeID':
        newData = EmployeeDetails.objects.filter(employeeID=val3)  
        flag=True       
    elif val2=='Project':
        newData = EmployeeDetails.objects.filter(project=val3)   
        flag=True   
    elif val2=='DateOfJoin':
        newData = EmployeeDetails.objects.filter(dateOfJoin=val3) 
        flag=True       
    else:
        return HttpResponseRedirect('/employeeList/')    
    #tableList = EmployeeDetails.objects.all()
    paginator = Paginator(newData, 10)    
    try:
         page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        contacts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(0)               
    return render_to_response('filter.html',{'newData':newData,'emp_list': contacts,'val2':val2,'val3':val3,'flag':flag})        

过滤器.html

^{pr2}$

升序和降序函数

def sortAscend(request):
    tableList = EmployeeDetails.objects.all().order_by('userName')
    paginator = Paginator(tableList, 12)    
    try:
         page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        contacts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(0)
    return render_to_response('sortAscend.html', {'emp_list': contacts})

#Method for listing the employees in descending order
def sortDescend(request):
    tableList = EmployeeDetails.objects.all().order_by('-userName')
    paginator = Paginator(tableList, 12)    
    try:
         page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        contacts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(0)
    return render_to_response('sortDescend.html', {'emp_list': contacts})

分类中心.html

{%for emp in emp_list.object_list%}
    <tr> <td><a STYLE="text-decoration:none" href ="http://10.1.0.90:8080/singleEmployee/{{emp.id}} "> {{ emp.userName }} </a></td> </tr><td>
{%endfor%}

Tags: getobjectsrequestpagefilterflagpaginatorcontacts
2条回答

另一种在视图级别处理排序的方法是在模板上进行排序。因此,您可能需要签出jquery tablesorter(因为您在显示中也使用了一个表)。它按升序/降序处理排序。在

因此,如果过滤后的结果可以显示到页面上,那么就说filtered_结果.html,你可以这样做。在

<!  filtered_results.html  >
<head>
   ...
   <script type="text/javascript" src="/path/to/jquery-latest.js"></script> 
   <script type="text/javascript" src="/path/to/jquery.tablesorter.js"></script> 
   <script type="text/javascript">
       $(document).ready(function() {
           $("#myTable").tablesorter();
       });
   </script>
</head>
<body>
    <table id="myTable">
        <thead><tr><th>Some-Label</th></tr></thead>
        <tbody>
        {% for emp in emp_list.object_list %}
            <tr><td><a href="http://10.1.0.90:8080/singleEmployee/{{emp.id}}">{{emp.userName}}</a></td></tr>
        {% endfor %}
        </tbody>
    </table>
</body>

单击“某个标签”的单元格将按升序/降序切换排序。在

此外,它还有一个处理分页的插件。看看这个link演示。在

我不确定我是否理解这个问题,但是如果您想将排序应用于筛选的对象,您可能需要添加某种缓存(不同于django的内置缓存),它存储过滤后的queryset并对其进行排序。或者,您可以使用django的会话管理传递filter选项并重新执行排序查询。这需要重构filter,使if/elif链独立于该视图,并返回过滤后的queryset。在

例如:

   def filterHandler(request):
     val3='' 
     if request.GET.has_key('choices'):
        val2=request.GET.get('choices')
     if request.GET.has_key('textField'):
        val3=request.GET.get('textField')
     if request.POST:
        val2=request.POST.get('choices')    
        val3=request.POST.get('textField')
     newData , flag = filter(val2, val3)
     if newData is None:
       return HttpResponseRedirect('/employeeList/')    
     #tableList = EmployeeDetails.objects.all()
     paginator = Paginator(newData, 10)    
     try:
         page = int(request.GET.get('page', '1'))
     except ValueError:
        page = 1
     try:
        contacts = paginator.page(page)
     except (EmptyPage, InvalidPage):
        contacts = paginator.page(0)

     request.session['val2'] = val2
     request.session['val3'] = val3              
     return render_to_response('filter.html',{'newData':newData,'emp_list': contacts,'val2':val2,'val3':val3,'flag':flag})    

    def filter(val2, val3):
      newData = None
      flag = False
      if val2=='Designation':                
        newData = EmployeeDetails.objects.filter(designation=val3) 
        flag=True 
      elif val2=='Name':
        newData = EmployeeDetails.objects.filter(userName__icontains=val3)
        flag=True 
      elif val2=='EmployeeID':
        newData = EmployeeDetails.objects.filter(employeeID=val3)  
        flag=True       
      elif val2=='Project':
        newData = EmployeeDetails.objects.filter(project=val3)   
        flag=True   
      elif val2=='DateOfJoin':
        newData = EmployeeDetails.objects.filter(dateOfJoin=val3) 
        flag=True       
      return newData, flag

现在您的排序方法可以获得最初传递的过滤器值。也可以将它们作为get参数添加到视图url中。在

相关问题 更多 >

    热门问题