source: consulta_publica/consulta/views.py @ bf37088

baseconstituyenteestudiantesgeneralplan_patriasala
Last change on this file since bf37088 was bf37088, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Agregado botón de iniciar sesión al inicio, solventado problema de importacion

  • Propiedad mode establecida a 100644
File size: 23.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 consulta.views
8#
9# Vistas correspondientes a la aplicación consulta
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
15import json
16from django.shortcuts import render
17from django.core.urlresolvers import reverse_lazy
18from django.http import JsonResponse
19from django.contrib.auth.models import User
20from django.views.generic import CreateView, ListView, TemplateView, DeleteView, DetailView, UpdateView
21from django.contrib.messages.views import SuccessMessageMixin
22from django.contrib.auth.mixins import LoginRequiredMixin
23from braces.views import GroupRequiredMixin
24from .models import Consulta, Pregunta, TipoPregunta, Opcion
25from .forms import ConsultaForm, ConsultaPreguntaForm
26from participacion.models import RespuestaSino, RespuestaOpciones, RespuestaAbierta
27 
28class ConsultaIndex(GroupRequiredMixin, LoginRequiredMixin, TemplateView):
29    """!
30    Clase que gestiona la vista principal de la consulta
31
32    @author Rodrigo Boet (rboet at cenditel.gob.ve)
33    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
34    @date 15-02-2017
35    @version 1.0.0
36    """
37    template_name = "consulta.index.html"
38    group_required = u"Administrador"
39
40
41class ConsultaCreate(GroupRequiredMixin, LoginRequiredMixin,SuccessMessageMixin,CreateView):
42    """!
43    Clase que gestiona la creación de consultas
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 15-02-2017
48    @version 1.0.0
49    """
50    model = Consulta
51    form_class = ConsultaPreguntaForm
52    template_name = "consulta.create.html"
53    success_message = "Se creó la consulta con éxito"
54    success_url = reverse_lazy('consulta_index')
55    group_required = u"Administrador"
56   
57    def get_context_data(self, **kwargs):
58        """!
59        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
60   
61        @author Rodrigo Boet (rboet at cenditel.gob.ve)
62        @copyright GNU/GPLv2
63        @date 16-02-2017
64        @param self <b>{object}</b> Objeto que instancia la clase
65        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
66        @return Retorna los datos de contexto
67        """
68        if 'tipo_pregunta_modal' in self.request.POST and 'texto_pregunta_modal' in self.request.POST:
69            post_data = dict(self.request.POST.lists())
70            if ((len(post_data['tipo_pregunta_modal'])>0 and len(post_data['texto_pregunta_modal'])>0) and (len(post_data['texto_pregunta_modal']) == len(post_data['tipo_pregunta_modal']))):
71                valores = {}
72                for i in range(len(post_data['tipo_pregunta_modal'])):
73                    valores[i] = {'texto_pregunta':post_data['texto_pregunta_modal'][i],'tipo_pregunta':post_data['tipo_pregunta_modal'][i]}
74                kwargs['opciones'] = json.dumps(valores)
75        return super(ConsultaCreate, self).get_context_data(**kwargs)
76       
77   
78    def form_valid(self,form):
79        """!
80        Metodo que valida si el formulario es valido
81   
82        @author Rodrigo Boet (rboet at cenditel.gob.ve)
83        @copyright GNU/GPLv2
84        @date 15-02-2017
85        @param self <b>{object}</b> Objeto que instancia la clase
86        @param form <b>{object}</b> Objeto que contiene el formulario de registro
87        @return Retorna el formulario validado
88        """
89       
90        post_data = dict(self.request.POST.lists())
91        user = User.objects.get(pk=self.request.user.id)
92       
93        ## Se crea el objeto de la consulta
94        self.object = form.save(commit=False)
95        self.object.nombre_consulta = form.cleaned_data['nombre_consulta']
96        self.object.activa = form.cleaned_data['activa']
97        self.object.user = user
98        self.object.save()
99       
100        ## Se crea la pregunta que se pide por defecto
101        tipo = TipoPregunta.objects.get(pk=form.cleaned_data['tipo_pregunta'])
102        pregunta = Pregunta()
103        pregunta.texto_pregunta = form.cleaned_data['texto_pregunta']
104        pregunta.tipo_pregunta = tipo
105        pregunta.consulta = self.object
106        pregunta.save()
107         
108        ## Si se agregaron más preguntas se crean
109        if 'tipo_pregunta_modal' in self.request.POST and 'texto_pregunta_modal' in self.request.POST:
110            self.create_questions(self.object,post_data)
111       
112        return super(ConsultaCreate, self).form_valid(form)
113   
114   
115    def create_questions(self,objeto,data):
116        """!
117        Metodo para crear preguntas adicionales
118   
119        @author Rodrigo Boet (rboet at cenditel.gob.ve)
120        @copyright GNU/GPLv2
121        @date 16-02-2017
122        @param self <b>{object}</b> Objeto que instancia la clase
123        @param objeto <b>{object}</b> Objeto de la consulta
124        @param data <b>{dict}</b> Diccionario con los valores a guardar
125        """
126        if len(data['texto_pregunta_modal']) == len(data['tipo_pregunta_modal']):
127            print data['texto_pregunta_modal']
128            for i in range(len(data['texto_pregunta_modal'])):
129                tipo = TipoPregunta.objects.get(pk=data['tipo_pregunta_modal'][i])
130                pregunta = Pregunta()
131                pregunta.texto_pregunta = data['texto_pregunta_modal'][i]
132                pregunta.tipo_pregunta = tipo
133                pregunta.consulta = objeto
134                pregunta.save()
135   
136class ConsultaList(GroupRequiredMixin, LoginRequiredMixin,ListView):
137    """!
138    Clase que gestiona la lista de consultas
139
140    @author Rodrigo Boet (rboet at cenditel.gob.ve)
141    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
142    @date 15-02-2017
143    @version 1.0.0
144    """
145    model = Consulta
146    template_name = "consulta.list.html"
147    group_required = u"Administrador"
148   
149   
150class ConsultaDetail(GroupRequiredMixin, LoginRequiredMixin,DetailView):
151    """!
152    Clase que gestiona el detalle de una consulta
153
154    @author Rodrigo Boet (rboet at cenditel.gob.ve)
155    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
156    @date 17-02-2017
157    @version 1.0.0
158    """
159    model = Consulta
160    template_name = "consulta.detail.html"
161    group_required = u"Administrador"
162   
163    def get_context_data(self, **kwargs):
164        """!
165        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
166   
167        @author Rodrigo Boet (rboet at cenditel.gob.ve)
168        @copyright GNU/GPLv2
169        @date 17-02-2017
170        @param self <b>{object}</b> Objeto que instancia la clase
171        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
172        @return Retorna los datos de contexto
173        """
174        kwargs['preguntas'] = Pregunta.objects.filter(consulta_id=kwargs['object'].id).all()
175        kwargs['respuestas'] = True if RespuestaSino.objects.filter(pregunta__consulta=kwargs['object'].id) else False
176        kwargs['respuestas'] = True if RespuestaOpciones.objects.filter(opcion__pregunta__consulta=kwargs['object'].id) else kwargs['respuestas']
177        kwargs['respuestas_abierta'] = True if RespuestaAbierta.objects.filter(pregunta__consulta=kwargs['object'].id) else False
178        return super(ConsultaDetail, self).get_context_data(**kwargs)
179   
180class ConsultaDelete(GroupRequiredMixin, LoginRequiredMixin,SuccessMessageMixin,DeleteView):
181    """!
182    Clase que gestiona el borrado de consultas
183
184    @author Rodrigo Boet (rboet at cenditel.gob.ve)
185    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
186    @date 15-02-2017
187    @version 1.0.0
188    """
189    model = Consulta
190    template_name = "consulta.delete.html"
191    success_message = "Se eliminó la consulta con éxito"
192    success_url = reverse_lazy('consulta_index')
193    group_required = u"Administrador"
194   
195   
196class ConsultaUpdate(GroupRequiredMixin, LoginRequiredMixin,SuccessMessageMixin,UpdateView):
197    """!
198    Clase que gestiona la actualización de consultas
199
200    @author Rodrigo Boet (rboet at cenditel.gob.ve)
201    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
202    @date 17-02-2017
203    @version 1.0.0
204    """
205    model = Consulta
206    form_class = ConsultaForm
207    template_name = "consulta.update.html"
208    success_message = "Se actualizó la consulta con éxito"
209    success_url = reverse_lazy('consulta_list')
210    group_required = u"Administrador"
211   
212   
213    def get_context_data(self, **kwargs):
214        """!
215        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
216   
217        @author Rodrigo Boet (rboet at cenditel.gob.ve)
218        @copyright GNU/GPLv2
219        @date 17-02-2017
220        @param self <b>{object}</b> Objeto que instancia la clase
221        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
222        @return Retorna los datos de contexto
223        """
224        preguntas = Pregunta.objects.filter(consulta_id=self.object.id).all()
225        kwargs['preguntas'] = preguntas
226        return super(ConsultaUpdate, self).get_context_data(**kwargs)
227       
228       
229class ConsultaStats(GroupRequiredMixin, LoginRequiredMixin,TemplateView):
230    """!
231    Clase que gestiona las estadísticas de la consulta
232
233    @author Rodrigo Boet (rboet at cenditel.gob.ve)
234    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
235    @date 18-04-2017
236    @version 1.0.0
237    """
238    template_name = "consulta.stats.html"
239    group_required = u"Administrador"
240   
241    def get_context_data(self, **kwargs):
242        """!
243        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
244   
245        @author Rodrigo Boet (rboet at cenditel.gob.ve)
246        @copyright GNU/GPLv2
247        @date 18-04-2017
248        @param self <b>{object}</b> Objeto que instancia la clase
249        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
250        @return Retorna los datos de contexto
251        """
252        preguntas_opciones = []
253        preguntas_sino = []
254        for pregunta in Pregunta.objects.filter(consulta_id=self.kwargs['pk']).exclude(tipo_pregunta_id=5).all():
255            if pregunta.tipo_pregunta_id<3:
256                preguntas_opciones.append(self.get_pregunta_opciones(pregunta.id,pregunta.texto_pregunta))
257            elif pregunta.tipo_pregunta_id<5:
258                preguntas_sino.append(self.get_pregunta_sino(pregunta.id,pregunta.texto_pregunta))
259        kwargs['preguntas_opciones'] = preguntas_opciones
260        kwargs['preguntas_sino'] = preguntas_sino
261                       
262        return super(ConsultaStats, self).get_context_data(**kwargs)
263   
264    def get_pregunta_opciones(self,id,titulo):
265        """!
266        Metodo que permite cargar las opciones para una pregunta simple o múltiple
267   
268        @author Rodrigo Boet (rboet at cenditel.gob.ve)
269        @copyright GNU/GPLv2
270        @date 18-04-2017
271        @param self <b>{object}</b> Objeto que instancia la clase
272        @param id <b>{int}</b> Entero con el id de la consulta
273        @return Retorna los datos de contexto
274        """
275        options = []
276        values = []
277        for opcion in Opcion.objects.filter(pregunta_id=id).all():
278            options.append(opcion.texto_opcion.encode('utf8'))
279            values.append(RespuestaOpciones.objects.filter(opcion_id=opcion.id).count())
280        data = {}
281        data['titulo'] = titulo
282        data['opciones'] = options
283        data['valores'] = values
284        return data
285   
286    def get_pregunta_sino(self,id,titulo):
287        """!
288        Metodo que permite cargar las opciones para una pregunta si o no
289   
290        @author Rodrigo Boet (rboet at cenditel.gob.ve)
291        @copyright GNU/GPLv2
292        @date 18-04-2017
293        @param self <b>{object}</b> Objeto que instancia la clase
294        @param id <b>{int}</b> Entero con el id de la consulta
295        @return Retorna los datos de contexto
296        """
297        Si = RespuestaSino.objects.filter(respuesta=True).count()
298        No = RespuestaSino.objects.filter(respuesta=False).count()
299        data = {}
300        data['titulo'] = titulo
301        data['opciones'] = ['Si','No']
302        data['valores'] = [Si, No]
303        return data
304   
305   
306class OpcionesCreate(GroupRequiredMixin, LoginRequiredMixin,CreateView):
307    """!
308    Clase que gestiona la creación de opciones
309
310    @author Rodrigo Boet (rboet at cenditel.gob.ve)
311    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
312    @date 20-02-2017
313    @version 1.0.0
314    """
315    model = Opcion
316    fields = ['texto_opcion']
317    template_name = "consulta.create.html"
318    success_url = reverse_lazy('consulta_index')
319    group_required = u"Administrador"
320           
321   
322    def form_valid(self,form):
323        """!
324        Metodo que valida si el formulario es valido
325   
326        @author Rodrigo Boet (rboet at cenditel.gob.ve)
327        @copyright GNU/GPLv2
328        @date 20-02-2017
329        @param self <b>{object}</b> Objeto que instancia la clase
330        @param form <b>{object}</b> Objeto que contiene el formulario de registro
331        @return Retorna el formulario validado
332        """
333        post_data = dict(self.request.POST.lists())
334        pregunta = Pregunta.objects.get(id=int(self.kwargs['pk']))
335       
336        ## Se guarda la primera opcion
337        self.object = form.save(commit=False)
338        self.object.texto_opcion = form.cleaned_data['texto_opcion']
339        self.object.pregunta = pregunta
340        self.object.save()
341       
342        ## Se guardan las demás opciones si existen
343        for i in range(len(post_data['texto_opcion'])-1):
344            opcion = Opcion()
345            opcion.texto_opcion = post_data['texto_opcion'][i]
346            opcion.pregunta = pregunta
347            opcion.save()
348           
349        if self.request.is_ajax():
350            return JsonResponse({"code":True})
351           
352        return super(OpcionesCreate, self).form_valid(form)
353   
354    def form_invalid(self,form):
355        """!
356        Metodo que valida si el formulario es invalido
357   
358        @author Rodrigo Boet (rboet at cenditel.gob.ve)
359        @copyright GNU/GPLv2
360        @date 20-02-2017
361        @param self <b>{object}</b> Objeto que instancia la clase
362        @param form <b>{object}</b> Objeto que contiene el formulario de registro
363        @return Retorna el formulario inválido
364        """
365        if self.request.is_ajax():
366            return JsonResponse({"code":False,'errors':form.errors})
367        return super(OpcionesCreate, self).form_invalid(form)
368   
369   
370class OpcionesUpdate(GroupRequiredMixin, LoginRequiredMixin,UpdateView):
371    """!
372    Clase que gestiona la actualización de las opciones
373
374    @author Rodrigo Boet (rboet at cenditel.gob.ve)
375    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
376    @date 20-02-2017
377    @version 1.0.0
378    """
379    model = Opcion
380    fields = ['texto_opcion']
381    template_name = "consulta.update.html"
382    success_url = reverse_lazy('consulta_list')
383    group_required = u"Administrador"
384   
385   
386    def post(self, request):
387        """!
388        Metodo que sobreescribe la acción por POST
389   
390        @author Rodrigo Boet (rboet at cenditel.gob.ve)
391        @copyright GNU/GPLv2
392        @date 20-02-2017
393        @param self <b>{object}</b> Objeto que instancia la clase
394        @param request <b>{object}</b> Objeto que contiene la petición
395        @return Retorna los datos de contexto
396        """
397        post_data = dict(self.request.POST.lists())
398        for i in range(len(post_data['texto_opcion'])):
399            opcion = Opcion.objects.filter(id=int(post_data['texto_opcion_id'][i]))
400            if(opcion):
401                opcion = opcion.get()
402                opcion.texto_opcion = post_data['texto_opcion'][i]
403                opcion.save()
404
405        if self.request.is_ajax():
406            return JsonResponse({"code":True})
407       
408class OpcionesDelete(GroupRequiredMixin, LoginRequiredMixin,DeleteView):
409    """!
410    Clase que gestiona el borrado de una opción
411
412    @author Rodrigo Boet (rboet at cenditel.gob.ve)
413    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
414    @date 20-02-2017
415    @version 1.0.0
416    """
417    model = Opcion
418    template_name = "consulta.update.html"
419    success_url = reverse_lazy('consulta_list')
420    group_required = u"Administrador"
421   
422    def post(self, request, pk):
423        """!
424        Metodo que sobreescribe la acción por POST
425   
426        @author Rodrigo Boet (rboet at cenditel.gob.ve)
427        @copyright GNU/GPLv2
428        @date 20-02-2017
429        @param self <b>{object}</b> Objeto que instancia la clase
430        @param request <b>{object}</b> Objeto que contiene la petición
431        @param pk <b>{int}</b> Recibe el id para filtrar
432        @return Retorna los datos de contexto
433        """
434        opcion = Opcion.objects.filter(id=int(pk))
435        if(opcion):
436            opcion = opcion.get()
437            opcion.delete()
438            return JsonResponse({'success':True})
439        return JsonResponse({'success':False,'mensaje':'Opción inválida'})
440           
441           
442class PreguntaDelete(GroupRequiredMixin, LoginRequiredMixin,DeleteView):
443    """!
444    Clase que gestiona el borrado de una pregunta
445
446    @author Rodrigo Boet (rboet at cenditel.gob.ve)
447    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
448    @date 20-02-2017
449    @version 1.0.0
450    """
451    model = Pregunta
452    template_name = "consulta.update.html"
453    success_url = reverse_lazy('consulta_list')
454    group_required = u"Administrador"
455   
456    def post(self, request, pk):
457        """!
458        Metodo que sobreescribe la acción por POST
459   
460        @author Rodrigo Boet (rboet at cenditel.gob.ve)
461        @copyright GNU/GPLv2
462        @date 20-02-2017
463        @param self <b>{object}</b> Objeto que instancia la clase
464        @param request <b>{object}</b> Objeto que contiene la petición
465        @param pk <b>{int}</b> Recibe el id para filtrar
466        @return Retorna los datos de contexto
467        """
468        pregunta = Pregunta.objects.filter(id=int(pk))
469        if(pregunta):
470            pregunta = pregunta.get()
471            ## Si tiene opciones, se buscan y se borran
472            if(pregunta.tipo_pregunta_id==1):
473                opciones = Opcion.objects.filter(pregunta_id=pregunta.id)
474                if (opciones):
475                    for item in opciones.all():
476                        item.delete()               
477            pregunta.delete()
478            return JsonResponse({'success':True})
479        return JsonResponse({'success':False,'mensaje':'Pregunta inválida'})
480   
481   
482class PreguntaCreate(GroupRequiredMixin, LoginRequiredMixin,CreateView):
483    """!
484    Clase que gestiona la creación de preguntas
485
486    @author Rodrigo Boet (rboet at cenditel.gob.ve)
487    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
488    @date 21-02-2017
489    @version 1.0.0
490    """
491    model = Pregunta
492    fields = ['texto_pregunta','tipo_pregunta']
493    template_name = "consulta.create.html"
494    success_url = reverse_lazy('consulta_index')
495    group_required = u"Administrador"
496   
497    def form_valid(self,form):
498        """!
499        Metodo que valida si el formulario es valido
500   
501        @author Rodrigo Boet (rboet at cenditel.gob.ve)
502        @copyright GNU/GPLv2
503        @date 21-02-2017
504        @param self <b>{object}</b> Objeto que instancia la clase
505        @param form <b>{object}</b> Objeto que contiene el formulario de registro
506        @return Retorna el formulario validado
507        """
508        post_data = dict(self.request.POST.lists())
509        consulta = Consulta.objects.get(id=int(self.kwargs['pk']))
510       
511        ## Se guarda la primera opcion
512        self.object = form.save(commit=False)
513        self.object.texto_opcion = form.cleaned_data['texto_pregunta']
514        self.object.tipo_pregunta = form.cleaned_data['tipo_pregunta']
515        self.object.consulta = consulta
516        self.object.save()
517       
518        ## Se guardan las demás opciones si existen
519        for i in range(len(post_data['texto_pregunta'])-1):
520            tipo_pregunta = TipoPregunta.objects.get(id=int(post_data['tipo_pregunta'][i]))
521            pregunta = Pregunta()
522            pregunta.texto_opcion = post_data['texto_pregunta'][i]
523            pregunta.tipo_pregunta = post_data['tipo_pregunta'][i]
524            pregunta.consulta = consulta
525            pregunta.save()
526           
527        if self.request.is_ajax():
528            return JsonResponse({"code":True})
529           
530        return super(OpcionesCreate, self).form_valid(form)
531   
532    def form_invalid(self,form):
533        """!
534        Metodo que valida si el formulario es invalido
535   
536        @author Rodrigo Boet (rboet at cenditel.gob.ve)
537        @copyright GNU/GPLv2
538        @date 21-02-2017
539        @param self <b>{object}</b> Objeto que instancia la clase
540        @param form <b>{object}</b> Objeto que contiene el formulario de registro
541        @return Retorna el formulario inválido
542        """
543        if self.request.is_ajax():
544            return JsonResponse({"code":False,'errors':form.errors})
545        return super(OpcionesCreate, self).form_invalid(form)
546   
547class PreguntaUpdate(GroupRequiredMixin, LoginRequiredMixin, UpdateView):
548    """!
549    Clase que gestiona la actualización de las preguntas
550
551    @author Rodrigo Boet (rboet at cenditel.gob.ve)
552    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
553    @date 23-02-2017
554    @version 1.0.0
555    """
556    model = Pregunta
557    fields = ['texto_pregunta','tipo_pregunta']
558    template_name = "consulta.update.html"
559    success_url = reverse_lazy('consulta_list')
560    group_required = u"Administrador"
561   
562    def post(self, request):
563        """!
564        Metodo que sobreescribe la acción por POST
565   
566        @author Rodrigo Boet (rboet at cenditel.gob.ve)
567        @copyright GNU/GPLv2
568        @date 23-02-2017
569        @param self <b>{object}</b> Objeto que instancia la clase
570        @param request <b>{object}</b> Objeto que contiene la petición
571        @return Retorna los datos de contexto
572        """
573        post_data = dict(self.request.POST.lists())
574        for i in range(len(post_data['texto_pregunta_modal'])):
575            pregunta = Pregunta.objects.filter(id=int(post_data['texto_pregunta_id'][i]))
576            if(pregunta):
577                pregunta = pregunta.get()
578                salvar = False
579                if(pregunta.texto_pregunta != post_data['texto_pregunta_modal'][i]):
580                    pregunta.texto_pregunta = post_data['texto_pregunta_modal'][i]
581                    salvar = True
582                if(pregunta.tipo_pregunta != post_data['tipo_pregunta_modal'][i]):
583                    tipo_pregunta = TipoPregunta.objects.filter(id=int(post_data['tipo_pregunta_modal'][i])).get()
584                    pregunta.tipo_pregunta = tipo_pregunta
585                    salvar = True
586                if(salvar):   
587                    pregunta.save()
588
589        if self.request.is_ajax():
590            return JsonResponse({"code":True})
591   
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.