source: gestor_consulta/base/views.py @ 471026c

Last change on this file since 471026c was 471026c, checked in by Argenis Osorio <argenisosorio580@…>, 7 años ago

Probando DjangoFilter? directamente en las views de la base, fuera de la app rest

  • Propiedad mode establecida a 100644
File size: 5.3 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Consulta Pública
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package participacion.views
8#
9# Vistas correspondientes a la aplicación participacion
10# @author Rodrigo Boet (rboet at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @version 1.0
15from django.shortcuts import render
16from django.http import HttpResponse
17from django.apps import apps
18from django.views.generic import TemplateView
19from django.contrib.auth.mixins import LoginRequiredMixin
20import json
21from rest_framework.views import APIView
22from rest_framework.response import Response
23from rest_framework import generics
24from django_filters.rest_framework import DjangoFilterBackend
25from serializers import EntidadSerializer, MunicipioSerializer, ParroquiaSerializer
26from models import Entidad, Municipio, Parroquia
27
28
29class Error403(TemplateView):
30    """!
31    Clase para mostrar el error de permisos
32
33    @author Rodrigo Boet (rboet at cenditel.gob.ve)
34    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
35    @date 09-01-2017
36    @version 1.0.0
37    """
38    template_name = "base.403.html"
39   
40   
41class Inicio(TemplateView):
42    """!
43    Clase para mostrar el inicio del sistema
44
45    @author Rodrigo Boet (rboet at cenditel.gob.ve)
46    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
47    @date 24-04-2017
48    @version 1.0.0
49    """
50    template_name = "inicio.html"
51
52
53def actualizar_combo(request):
54    """!
55    Función que actualiza los datos de un select dependiente de los datos de otro select
56
57    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
58    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
59    @date 28-04-2016
60    @param request <b>{object}</b> Objeto que contiene la petición
61    @return Devuelve un HttpResponse con el JSON correspondiente a los resultados de la consulta y los respectivos
62            elementos a cargar en el select
63    """
64    try:
65        if not request.is_ajax():
66            return HttpResponse(json.dumps({'resultado': False, 'error': str('La solicitud no es ajax')}))
67
68        ## Valor del campo que ejecuta la acción
69        cod = request.GET.get('opcion', None)
70
71        ## Nombre de la aplicación del modelo en donde buscar los datos
72        app = request.GET.get('app', None)
73
74        ## Nombre del modelo en el cual se va a buscar la información a mostrar
75        mod = request.GET.get('mod', None)
76       
77        ## Atributo por el cual se va a filtrar la información
78        campo = request.GET.get('campo', None)
79
80        ## Atributo del cual se va a obtener el valor a registrar en las opciones del combo resultante
81        n_value = request.GET.get('n_value', None)
82
83        ## Atributo del cual se va a obtener el texto a registrar en las opciones del combo resultante
84        n_text = request.GET.get('n_text', None)
85
86        ## Nombre de la base de datos en donde buscar la información, si no se obtiene el valor por defecto es default
87        bd = request.GET.get('bd', 'default')
88
89        filtro = {}
90
91        if app and mod and campo and n_value and n_text and bd:
92            modelo = apps.get_model(app, mod)
93           
94            if cod:
95                filtro = {campo: cod}
96
97            out = "<option value=''>%s...</option>" % str("Seleccione")
98
99            combo_disabled = "false"
100
101            if cod != "" and cod != "0":
102                for o in modelo.objects.using(bd).filter(**filtro).order_by(n_text):
103                    out = "%s<option value='%s'>%s</option>" \
104                          % (out, str(o.__getattribute__(n_value)),
105                             o.__getattribute__(n_text))
106            else:
107                combo_disabled = "true"
108
109            return HttpResponse(json.dumps({'resultado': True, 'combo_disabled': combo_disabled, 'combo_html': out}))
110
111        else:
112            return HttpResponse(json.dumps({'resultado': False,
113                                            'error': str('No se ha especificado el registro')}))
114
115    except Exception as e:
116        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
117
118
119class EntidadList(generics.ListAPIView):
120    """!
121    Clase que permite listar los datos rest de los usuarios
122
123    @author Argenis Osorio (aosorio at cenditel.gob.ve)
124    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
125    @date 17-08-2017
126    @version 1.0.0
127    """
128    queryset = Entidad.objects.all()
129    serializer_class = EntidadSerializer
130    filter_fields = ('id', 'codigo', 'nombre',)
131
132
133class EntidadDetail(generics.RetrieveUpdateDestroyAPIView):
134    """!
135    Clase que permite detallar los datos rest de los usuarios
136
137    @author Argenis Osorio (aosorio at cenditel.gob.ve)
138    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
139    @date 17-08-2017
140    @version 1.0.0
141    """
142    queryset = Entidad.objects.all()
143    serializer_class = EntidadSerializer
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.