сортировка с помощью переключателя не работает django

#html #django #django-views #django-templates

Вопрос:

У меня есть веб-страница, как показано ниже, поэтому, когда я нажимаю на любой 1 из моих переключателей, мой URL-адрес покажет, что я нажал, но моя таблица данных не будет сортироваться в порядке возрастания в соответствии с тем, что я выбрал, как мне исправить эту проблему и как сделать так, чтобы при использовании строки поиска и фильтрации страницы она все равно сортировалась в порядке возрастания?

введите описание изображения здесь

views.py

 @login_required() def ViewMCO(request):  search_post = request.GET.get('q')  if (search_post is not None) and search_post:  allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(  Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)  | Q(serialno__icontains=search_post))  if not allusername:  allusername = Photo.objects.all().order_by("-Datetime")    else:  allusername = Photo.objects.all().order_by("-Datetime") # The newest submitted log data will appear at the top     page = request.GET.get('page')  paginator = Paginator(allusername, 6)  try:  allusername = paginator.page(page)  except PageNotAnInteger:  allusername = paginator.page(1)  except EmptyPage:  allusername = paginator.page(paginator.num_pages)      context = {'allusername': allusername, 'query': search_post}  return render(request, 'ViewMCO.html', context)  

ViewMCO.html

 {% extends "customerbase.html" %}  {% block content %}  <style>  table {  border-collapse:separate;  border:solid black 1px;  border-radius:6px;  -moz-border-radius:6px;  }    td, th {  border-left:solid black 1px;  border-top:solid black 1px;  }    th {  border-top: none;  }    td:first-child, th:first-child {  border-left: none;  }   .pagination a {  padding: 10px;  }   .sort {  display: inline;  margin: 0 20px 0 20px;  }    </style>  <script>      // Function to download table data into csv file  function download_table_as_csv(table_id, separator = ',') {  var rows = document.querySelectorAll('table#'   table_id   ' tr');  var csv = [];  for (var i = 0; i < rows.length; i  ) {  var row = [], cols = rows[i].querySelectorAll('td, th');  for (var j = 0; j < cols.length; j  ) {  var data = cols[j].innerText.replace(/(rn|n|r)/gm, '').replace(/(ss)/gm, ' ')  data = data.replace(/"/g, '""');  row.push('"'   data   '"');  }  csv.push(row.join(separator));  }  var csv_string = csv.join('n');  var filename = 'export_'   table_id   '_'   new Date().toLocaleDateString()   '.csv';  var link = document.createElement('a');  link.style.display = 'none';  link.setAttribute('target', '_blank');  link.setAttribute('href', 'data:text/csv;charset=utf-8,'   encodeURIComponent(csv_string));  link.setAttribute('download', filename);  document.body.appendChild(link);  link.click();  document.body.removeChild(link);  };   </script>    <div style="padding-left:16px">  <br>      <div class="form-block">  <h6>Search for Part Number/ Serial Number/ Reception Number/ MCO Number/ Customer Name/ Status</h6>  <form class="form-inline my-2 my-lg-0" action="{% url 'ViewMCO' %}" method='GET' value='{{ request.GET.q }}'>  <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>  <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>  </form>   <div class="sort">  <h5 class="col-md-3">Sort By : </h5>    <div id="sortBlock" class="col-md-9">  <form class="form-inline my-2 my-lg-0" action="{% url 'ViewMCO' %}" method='GET' value='{{ request.GET.p }}'>  <div class="sort">  <input type="radio" id="partno" name="sortType" value="partno">  <label for="partno">Part Number</label>  </div>   <div class="sort">  <input type="radio" id="serialno" name="sortType" value="serialno">  <label for="serialno">Serial Number</label>  </div>   <div class="sort">  <input type="radio" id="receptionno" name="sortType" value="receptionno">  <label for="receptionno">Reception Number</label>  </div>   <div class="sort">  <input type="radio" id="mcoNum" name="sortType" value="mcoNum">  <label for="mcoNum">MCO Number</label>  </div>   <div class="sort">  <input type="radio" id="Customername" name="sortType" value="Customername">  <label for="Customername">Customer Name</label>  </div>  <div class="sort">  <input type="Submit" value="Sort"/>  </div>  </form>  </div>  </div>  </div>       <table id="viewTable" class="m-2">  <i class="fa fa-download" aria-hidden="true"></i>  <a href="#" onclick="download_table_as_csv('viewTable');">Download as CSV</a>  <br>    <tr class="header">  <th>Latest Log</th>  <th>Part Number</th>  <th>Serial Number</th>  <th>Reception Number</th>  <th>MCO Number</th>  <th>Customer Name</th>  <th>Status</th>  <th>Action</th>  </tr>  {% for photo in allusername %}      <tr>  <td>{{photo.Datetime}}</td>  <td>{{photo.partno}}</td>  <td>{{photo.serialno}}</td>  <td>{{photo.reception}}</td>  <td>{{photo.mcoNum}}</td>  <td>{{photo.Customername}}</td>  <td>{{photo.status}}</td>    <td>  <form action="{% url 'customerdetails' photo.id %}" method="post">  {% csrf_token %}  <button type="submit" class="btn btn-sm btn-info">View</button>  </form>  </td>  </tr>    {% endfor %}    </table>  <br>   {% if allusername.has_other_pages %}   <ul class="pagination pr-3 mr-1 ml-auto">   {% if allusername.has_previous %}  <li><a href="?q={{ query|urlencode }}amp;page={{ allusername.previous_page_number }}">amp;laquo;</a></li>  {% else %}  <li class="disabled"><span>amp;laquo;</span></li>  {% endif %}  {% for i in allusername.paginator.page_range %}  {% if allusername.number == i %}  <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>  {% else %}  <li><a href="?q={{ query|urlencode }}amp;page={{ i }}">{{ i }}</a></li>  {% endif %}  {% endfor %}  {% if allusername.has_next %}  <li><a href="?q={{ query|urlencode }}amp;page={{ allusername.next_page_number }}">amp;raquo;</a></li>  {% else %}  <li class="disabled"><span>amp;raquo;</span></li>  {% endif %}  </ul>  {% endif %}    </div>  {% endblock %}  

Ответ №1:

Если вы хотите отсортировать данные queryset, это должно быть реализовано, как показано ниже. Если вы хотите добавить сортировку по убыванию или по возрастанию, то вы можете сделать это с помощью параметра order_by, передающего » — «по убыванию, пустую строку по возрастанию, например «- id «по убыванию,» id » по возрастанию.

  @login_required() def ViewMCO(request):  search_post = request.GET.get('q')  if (search_post is not None) and search_post:  allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(  Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)  | Q(serialno__icontains=search_post))  if not allusername:  allusername = Photo.objects.all().order_by("-Datetime")    else:  allusername = Photo.objects.all().order_by("-Datetime") # The newest submitted log data will appear at the top   # example code starts   sort_type = request.GET.get('sortType')  allusername = allusername.order_by(sort_type)   # example code ends   page = request.GET.get('page')  paginator = Paginator(allusername, 6)  try:  allusername = paginator.page(page)  except PageNotAnInteger:  allusername = paginator.page(1)  except EmptyPage:  allusername = paginator.page(paginator.num_pages)      context = {'allusername': allusername, 'query': search_post}  return render(request, 'ViewMCO.html', context)