Advertisement
Guest User

django-filters pagination

a guest
May 23rd, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.16 KB | None | 0 0
  1. views.py
  2. --------
  3.  
  4. class ComputerList(generic.ListView):
  5.     model = Computer
  6.     context_object_name = 'computers_list'
  7.     template_name = 'isupport/computer_list.html'
  8.     paginate_by = 20
  9.     queryset = Computer.objects.all()
  10.  
  11.     def get_context_data(self, **kwargs):
  12.         context = super().get_context_data(**kwargs)
  13.         context['filter'] = ComputerFilter(self.request.GET, queryset=self.get_queryset())
  14.         return context
  15.  
  16. filters.py
  17. ----------
  18.  
  19. class ComputerFilter(django_filters.FilterSet):
  20.  
  21.     computer_name = django_filters.CharFilter(label='Nombre', lookup_expr='icontains', widget=forms.TextInput(attrs={'class':'form-control col-sm-8'}))
  22.     computer_sn = django_filters.CharFilter(label='Número de Serie', lookup_expr='icontains', widget=forms.TextInput(attrs={'class':'form-control col-sm-8'}))
  23.     computer_saben = django_filters.CharFilter(label='Número de SABEN', lookup_expr='icontains', widget=forms.TextInput(attrs={'class':'form-control col-sm-8'}))
  24.     computer_model = django_filters.ModelChoiceFilter(label='Modelo', queryset=ComputerModel.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  25.     computer_section = django_filters.ModelChoiceFilter(label='Ubicación', queryset=Section.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  26.     computer_ipv4_adress = django_filters.CharFilter(label='Dirección IPv4', lookup_expr='icontains', widget=forms.TextInput(attrs={'class':'form-control col-sm-8'}))
  27.     computer_mac_adress = django_filters.CharFilter(label='Dirección MAC', lookup_expr='icontains', widget=forms.TextInput(attrs={'class':'form-control col-sm-8'}))
  28.     computer_os = django_filters.ModelChoiceFilter(label='Sistema Operativo', queryset=ComputerOS.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  29.     computer_state = django_filters.ModelChoiceFilter(label='Estado', queryset=State.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  30.     computer_model__computermodel_type = django_filters.ModelChoiceFilter(label='Tipo', queryset=ComputerType.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  31.     computer_hd = django_filters.ModelChoiceFilter(label='Capacidad de Disco', queryset=ComputerHDModel.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  32.     computer_hd__computerhdmodel_type = django_filters.ModelChoiceFilter(label='Tipo de Disco', queryset=ComputerHDType.objects.all(), widget=forms.Select(attrs={'class':'form-control col-sm-8'}))
  33.  
  34.     class Meta:
  35.         model = Computer
  36.         fields = (
  37.             'computer_name',
  38.             'computer_sn',
  39.             'computer_saben',
  40.             'computer_model',
  41.             'computer_os',
  42.             'computer_section',
  43.             'computer_state',
  44.             'computer_ipv4_adress',
  45.             'computer_mac_adress',
  46.             'computer_model__computermodel_type',
  47.             'computer_hd',
  48.             'computer_hd__computerhdmodel_type',
  49.         )
  50.  
  51.  
  52.  
  53. computers_list.html
  54. -------------------
  55.  
  56. {% if object_list %}
  57.  
  58.     <table id="computers_list" class="table table-hover table-striped">
  59.         <thead class="table-primary">
  60.             <tr>
  61.                 <th>Nombre</th>
  62.                 <th>Modelo</th>
  63.                 <th class="d-none d-md-table-cell">Sistema Operativo</th>
  64.                 <th class="d-none d-md-table-cell">Ubicación</th>
  65.                 <th>Estado</th>
  66.                 <th>SABEN</th>
  67.                 <th class="d-none d-md-table-cell">Dirección IP</th>
  68.                 <th class="d-none d-md-table-cell">Dirección MAC</th>
  69.                 <th class="d-none d-md-table-cell"></th>
  70.             </tr>
  71.         </thead>
  72.  
  73.         <tbody>
  74.             {% for computer in filter.qs %}
  75.  
  76.                 {% if computer.computer_status == 'Baja' %}
  77.  
  78.                     <tr class="table-danger">
  79.                
  80.                 {% else %}
  81.  
  82.                     <tr>
  83.  
  84.                 {% endif  %}
  85.  
  86.                     <td><a href="{% url 'isupport:computer_update' computer.computer_id %}">{{ computer.computer_name | upper }}</a></td>
  87.                     <td>{{ computer.computer_model }}</td>
  88.                     <td class="d-none d-md-table-cell">{{ computer.computer_os }}</td>
  89.                     <td class="d-none d-md-table-cell">{{ computer.computer_section }}</td>
  90.  
  91.  
  92.                     {% if computer.computer_status == "Activo" %}
  93.  
  94.                         <td class="text-success">{{ computer.computer_status }}</td>
  95.  
  96.                     {% elif computer.computer_status == "Inactivo" %}
  97.  
  98.                         <td class="text-secondary">{{ computer.computer_status }}</td>
  99.  
  100.                     {% elif computer.computer_status == "Baja" %}
  101.  
  102.                         <td>{{ computer.computer_status }}</td>
  103.  
  104.                     {% elif computer.computer_status == "Rota" %}
  105.  
  106.                         <td class="text-danger">{{ computer.computer_status }}</td>
  107.  
  108.                     {% elif computer.computer_status == "En Transito" %}
  109.  
  110.                         <td class="text-warning">{{ computer.computer_status }}</td>
  111.  
  112.                     {% else %}
  113.  
  114.                         <td>{{ computer.computer_status }}</td>
  115.                    
  116.                     {% endif %}
  117.  
  118.  
  119.                     <td>{{ computer.computer_saben }}</td>
  120.  
  121.                     {% if computer.computer_ipv4_adress == None %}
  122.  
  123.                         <td class="d-none d-md-table-cell">DHCP</td>
  124.  
  125.                     {% else %}
  126.  
  127.                         <td class="d-none d-md-table-cell">{{ computer.computer_ipv4_adress }}</td>
  128.  
  129.                     {% endif %}
  130.  
  131.                     {% if computer.computer_mac_adress is None %}
  132.  
  133.                         <td  class="d-none d-md-table-cell text-warning">N/A</td>
  134.                    
  135.                     {% else %}
  136.  
  137.                         <td class="d-none d-md-table-cell">{{ computer.computer_mac_adress | upper }}</td>
  138.  
  139.                     {% endif %}
  140.                    
  141.                     <td class="d-none d-md-table-cell"><a href="{% url 'isupport:computer_delete' computer.computer_id %}">Eliminar</a></td>
  142.  
  143.                 </tr>
  144.  
  145.             {% endfor %}
  146.    
  147.         </tbody>
  148.  
  149.     </table>
  150.  
  151.     {% if is_paginated %}
  152.         <nav aria-label="Page navigation">
  153.             <ul class="pagination pagination-sm">
  154.                 {% if page_obj.has_previus %}
  155.                     <li class="page-item">
  156.                         <a class="page-link" href="?page={{ page_obj.previus_page_number }}">Anterior</a>
  157.                     </li>
  158.                 {% else %}
  159.                     <li class="page-item disabled">
  160.                         <a class="page-link" href="#" tabindex="-1">Anterior</a>
  161.                     </li>
  162.                 {% endif %}
  163.                 {% for i in paginator.page_range %}
  164.                     <li class="page-item {% if page_obj.number == i %}active{% endif %}">
  165.                         <a class="page-link" href="?page={{ i }}">{{ i }}</a>
  166.                     </li>
  167.                 {% endfor %}
  168.                 {% if page_obj.has_next %}
  169.                     <li class="page-item">
  170.                         <a class="page-link" href="?page={{ page_obj.next_page_number }}">Siguiente</a>
  171.                     </li>
  172.                 {% else %}
  173.                     <li class="page-item disabled">
  174.                         <a class="page-link" href="#" tabindex="-1">Siguiente</a>
  175.                     </li>
  176.                 {% endif %}
  177.             </ul>
  178.         </nav>
  179.     {% endif %}
  180.  
  181. {% else %}
  182.  
  183.     <p>No hay registros</p>
  184.  
  185. {% endif %}
  186.  
  187. <div class="modal fade" id="modal_search">
  188.     <div class="modal-dialog" role="document">
  189.         <div class="modal-content">
  190.             <div class="modal-header">
  191.                 <h4 class="modal-title">Buscar</h4>
  192.                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  193.                     <span aria-hidden="true">&times;</span>
  194.                 </button>
  195.             </div>
  196.             <div class="modal-body">
  197.  
  198.                 <form method="GET" class="form-group" enctype="multipart/form-data">
  199.  
  200.                     {% for field in filter.form %}
  201.  
  202.                         <div class="fieldWrapper">
  203.                             {{ field.errors }}
  204.                             <div class="form-inline">
  205.                             <label class="col-sm-4 control-label">{{ field.label_tag }}</label>
  206.                             <div class="col-sm-8">{{ field }}</div>
  207.                             </div>
  208.                             {% if field.help_text %}
  209.                                 <p class="help">{{ field.help_text|safe }}</p>
  210.                             {% endif %}
  211.                             <p></p>
  212.                         </div>
  213.  
  214.                     {% endfor %}
  215.  
  216.             </div>
  217.            
  218.             <div class="modal-footer">
  219.                 <button type="submit" class="btn btn-primary">Buscar</button>
  220.                 <button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
  221.             </form>
  222.             </div>
  223.         </div>
  224.     </div>
  225. </div>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement