Conjunto c7b7e3b en sapic


Ignorar:
Fecha y hora:
07/09/2018 12:30:00 (hace 6 años)
Autor:
Luis Marquez <gordreezyogz@…>
Branches:
master
Children:
1901d86
Parents:
cd20b73
Mensaje:

Implemenetacion de funcionalidad modificar respuestas sub-modulo caracterizacion Social

Ubicación:
explicacion_situacional
Ficheros:
1 añadido
4 editados

Leyenda

No modificado
Añadido
Eliminado
  • explicacion_situacional/forms.py

    r72e62e0 rc7b7e3b  
    1414# @version 1.0
    1515
     16from django.core.exceptions import ValidationError
    1617from django.contrib.gis import forms
    1718from django.forms.fields import (
    18     CharField
     19    CharField,
     20    BooleanField,
    1921)
    2022
     23
    2124from explicacion_situacional.modelsExplicacion.modelsExplicacionesSituacional import *
     25
     26from explicacion_situacional.modelsEncuestas.modelsParticipacion import *
    2227
    2328
     
    113118                                    'default_lon': -66})
    114119        self.fields['ubicacion'].required = True
     120
     121class RespuestaSinoForm(forms.Form):
     122    """!
     123    Clase que permite crear el formulario para las respuestas de tipo SiNo
     124
     125    @author Manuel Zambrano
     126    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     127    @date 29-08-2018
     128    @version 1.0.0
     129    """
     130
     131    respuesta = forms.BooleanField(label='Respuesta',
     132                                widget=forms.Select(choices=((True,'Si'),
     133                                                            (False,'No')
     134                                                            )
     135                                                    ),
     136                                required=False
     137                                )
     138    justificacion = forms.CharField(label='Respuesta',
     139                                    widget=forms.Textarea(),
     140                                    required=False,
     141                                    min_length = 128,
     142                                    )
     143
     144    def __init__(self,*arg,**kwargs):
     145        """!
     146        Funcion que muestra el init del formulario
     147
     148        @author Manuel Zambrano
     149        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     150        @date 29-08-2018
     151        @version 1.0.0
     152        """
     153        super(RespuestaSinoForm, self).__init__(*arg,**kwargs)
     154        self.fields['justificacion'].widget.attrs.update({'placeholder': 'Justificacion','style':'width:370px;height:191px;'})
     155
     156    def clean(self):
     157        """!
     158        Funcion que sobreescribe el metodo clean() de la clase, validación para el campo de justificacion 
     159
     160        @author Manuel Zambrano
     161        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     162        @date 29-08-2018
     163        @version 1.0.0
     164        """
     165        cleaned_data = super(RespuestaSinoForm,self).clean()
     166        clean_respuesta = cleaned_data.get('respuesta')
     167        clean_justificacion = cleaned_data.get('justificacion')
     168        if not clean_respuesta:
     169            if not clean_justificacion:
     170                raise forms.ValidationError(
     171                "Verifique el campo de justificacion",
     172                code = "justificacion_error"
     173                )
     174
     175class RespuestaAbiertaForm(forms.Form):
     176    """!
     177    Clase que permite crear el formulario para las respuestas de tipo Abierta
     178
     179    @author Manuel Zambrano
     180    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     181    @date 29-08-2018
     182    @version 1.0.0
     183    """
     184
     185    respuesta = forms.CharField(label='Respuesta',
     186                                widget=forms.Textarea(),
     187                                min_length=128
     188                                )
     189
     190    def __init__(self,*arg,**kwargs):
     191        """!
     192        Funcion que muestra el init del formulario
     193
     194        @author Manuel Zambrano
     195        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     196        @date 29-08-2018
     197        @version 1.0.0
     198        """
     199       
     200        super(RespuestaAbiertaForm, self).__init__(*arg,**kwargs)
     201
     202
     203class RespuestaOpcionesForm(forms.Form):
     204    """!
     205    Clase que permite crear el formulario para las respuestas de tipo Opciones
     206
     207    @author Manuel Zambrano
     208    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     209    @date 29-08-2018
     210    @version 1.0.0
     211    """
     212
     213    respuesta = forms.ModelChoiceField(label = 'Opcion',
     214                                    queryset = Opcion.objects.all(),
     215                                    required=True,
     216                                    empty_label=None
     217                                    )
     218
     219    def __init__(self,*arg,**kwargs):
     220        """!
     221        Funcion que muestra el init del formulario
     222
     223        @author Manuel Zambrano
     224        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     225        @date 29-08-2018
     226        @version 1.0.0
     227        """
     228
     229        super(RespuestaOpcionesForm, self).__init__(*arg,**kwargs)
     230
     231   
     232       
     233
     234       
     235       
     236       
     237       
  • explicacion_situacional/templates/caracterizacion.social.html

    rcd20b73 rc7b7e3b  
    33{% block titulo %}_-=SAPIC-Caracterización Social=-_{% endblock titulo %}
    44{% block extracss %}
    5   <link rel="stylesheet" type="text/css" href="{% static 'DataTables/media/css/jquery.dataTables.min.css' %}">
     5  <link rel="stylesheet" type="text/css" href="{% static "DataTables/media/css/jquery.dataTables.min.css" %}">
     6  <link rel="stylesheet" type="text/css" href="{% static "DataTables/media/css/jquery.dataTables.min.css" %}">
     7  <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Buttons/css/buttons.dataTables.min.css" %}">
     8  <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Select/css/select.dataTables.min.css" %}">
     9  <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Responsive/css/responsive.dataTables.min.css" %}">
     10  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
    611{% endblock extracss %}
    712{% block extrajs %}
    8   <script type="text/javascript" language="javascript" src="{% static 'DataTables/media/js/jquery.dataTables.min.js' %}"></script>
    9   <script type="text/javascript">
    10     $(document).ready(function(){
    11       var table = $('#tabla-participacion').DataTable();
     13  <script type="text/javascript" language="javascript" src="{% static "DataTables/media/js/jquery.dataTables.min.js" %}"></script>
     14  <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/dataTables.buttons.min.js" %}"></script>
     15  <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.print.min.js" %}"></script>
     16  <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.jqueryui.js" %}"></script>
     17  <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.html5.min.js" %}"></script>
     18 
     19 
     20
     21<script type="text/javascript">
     22  function abrir_modal(url)
     23  {
     24    $('#popup').load(url, function()
     25    {
     26      $(this).modal('show');
    1227    });
    13   </script>
     28    return false;
     29  }
     30
     31  function cerrar_modal()
     32  {
     33    $('#popup').modal('hide');
     34    return false;
     35  }
     36
     37
     38  $(function() {
     39    var table = $('#tabla-participacion').DataTable({
     40      "columnDefs": [
     41        { width: '50%', targets: 0 },
     42        { width: '35%', targets: 1 },
     43      ],
     44      initComplete: function () {
     45            this.api().columns([2]).every( function () {
     46                var column = this;
     47                var select = $('#select_filter')
     48                    .on( 'change', function () {
     49                        var val = $.fn.dataTable.util.escapeRegex(
     50                            $(this).val()
     51                        );
     52 
     53                        column
     54                            .search( val ? '^'+val+'$' : '', true, false )
     55                            .draw();
     56                    } );
     57 
     58                column.data().unique().sort().each( function ( d, j ) {
     59                    select.append( '<option value="'+d+'">'+d+'</option>' )
     60                } );
     61            } );
     62        },
     63      "language": {
     64        url: "//cdn.datatables.net/plug-ins/1.10.16/i18n/Spanish.json"
     65      },
     66      "lengthMenu": [ [10, 50, 100, -1], [10, 50, 100, "Todo"] ],
     67     
     68     
     69      "scrollX": true,
     70      "fixedColumns": true ,
     71      "dom": 'lfrtBSip',
     72      "buttons": ['copy', 'csv', 'print']
     73    });
     74  });
     75
     76</script>
    1477{% endblock extrajs %}
    1578{% block contenido_principal %}
     
    2285                  </h2>
    2386            </section>
    24 
    2587            {% if consultas %}
    26               <table id="tabla-participacion">
     88            <select id="select_filter" style="color:#000"><option value="">Consulta</option></select>
     89              <table id="tabla-participacion" class="display ">
    2790                  <thead>
    2891                      <tr>
    2992                          <th>Pregunta</th>
    3093                          <th>Respuesta</th>
     94                          <th>Consulta</th>
     95                          <th>Accion</th>
    3196                      </tr>
    3297                  </thead>
    3398                  <tbody>
    3499                      {% for respuesta in si_no %}
    35                       <tr>
    36                           <td>{{ respuesta.pregunta }}</td>
    37                             {% if respuesta.respuesta %}
    38                               <td>Si</td>
    39                             {% else %}
    40                               <td>No</td>
    41                             {% endif %}
    42                       </tr>
     100                        {% if respuesta.respuesta %}
     101                          <tr>
     102                              <td>{{ respuesta.pregunta }}</td>
     103                              <td>Si</td> 
     104                              <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td>                       
     105                              <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td>
     106                          </tr>
     107                        {% else %}
     108                          <tr>
     109                            <td> {{respuesta.pregunta}} </td>
     110                            {% for justificacion in abierta  %}
     111                              {% if justificacion.es_justificacion and justificacion.pregunta.pk == respuesta.pregunta.pk %}
     112                                <td>No,{{justificacion.texto_respuesta}} </td> 
     113                              {% endif %}
     114                            {% endfor %}
     115                            <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td>
     116                            <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')" ><i class="glyphicon glyphicon-edit"></i></a></td>
     117                          </tr>
     118                        {% endif %}
     119                         
    43120                      {% endfor %}
     121
    44122                      {% for respuesta in opciones %}
    45123                      <tr>
    46                           <td>{{ respuesta.pregunta }}</td>
     124                          <td>{{ respuesta.opcion.pregunta }}</td>
    47125                          <td>{{ respuesta.opcion }}</td>
     126                          <td>{{ respuesta.opcion.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td>
     127                          <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.opcion.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td> 
    48128                      </tr>
    49129                      {% endfor %}
    50130                      {% for respuesta in abierta %}
    51                       <tr>
    52                           <td>{{ respuesta.pregunta }}</td>
    53                           <td>{{ respuesta.texto_respuesta }}</td>
    54                       </tr>
     131                     
     132                          {% if not respuesta.es_justificacion %}
     133                          <tr>
     134                            <td>{{ respuesta.pregunta }}</td>
     135                            <td>{{ respuesta.texto_respuesta }}</td>
     136                            <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td>
     137                          <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td>
     138                          </tr>     
     139                          {% endif %}
     140                     
    55141                      {% endfor %}
    56142                      {% for respuesta in ubicacion %}
     
    58144                          <td>{{ respuesta.pregunta }}</td>
    59145                          <td>{{ respuesta.coordenadas }}</td>
     146                          <td>{{ respuesta.pregunta.consulta.nombre_consulta }}</td>
     147                          <td><a class="btn" href="#"><i class="icon"></i></a></td>         
    60148                      </tr>
    61149                      {% endfor %}
    62150                  </tbody>
     151                 
    63152              </table>
    64153            {% endif %}
     154            <div id="popup" class="modal fade" role="dialog"></div>
    65155            {% if not 3 in consultas %}
    66156            <section class="content">
  • explicacion_situacional/urls.py

    rcd20b73 rc7b7e3b  
    3939                    name="modificar_respuesta"),
    4040
    41                 # Caracterización social
     41
     42                url(r'^modificar-respuesta/(?P<tipo>.+)/(?P<pk>.+)$',
     43                    ModificarRespuestaView.as_view(),
     44                    name="modificar_respuesta_"),
     45
     46                #Caracterización social
    4247                url(r'^caracterizacion-social/$',
    4348                    CaracterizacionSocialView.as_view(),
     
    9196                    EncuestasParticiparView.as_view(),
    9297                    name="servicio_incidente"),
    93 
    94                  # Caracterización política
     98               
     99                # Caracterización política
    95100                url(r'^caracterizacion-politica/$',
    96101                    CaracterizacionPoliticaView.as_view(),
     
    115120                    name="comunicacion_politica"),
    116121
    117                 url(r'^modificar-respuesta/$',
    118                     ModificarRespuesta,
    119                     name="modificar_respuesta"),
    120 
    121122                # Ajax
    122123                url(r'^validar-participacion-ajax',
  • explicacion_situacional/views/caracterizacionSocialView.py

    r61114b7 rc7b7e3b  
    1515
    1616from django.views.generic import (
    17     TemplateView
     17    TemplateView,
     18    UpdateView
    1819)
    19 
     20from django.contrib import messages
    2021from utils.views import LoginRequeridoPerAuth
    2122
     23from django.contrib.gis import forms
     24
    2225from explicacion_situacional.modelsEncuestas.modelsConsultas import (
    23     Consulta
     26    Consulta,
     27    Opcion,
    2428)
    2529
     
    2832    RespuestaAbierta, RespuestaUbicacion
    2933)
     34
     35from django.urls import reverse_lazy
     36from ..forms import RespuestaSinoForm, RespuestaAbiertaForm ,RespuestaOpcionesForm
     37from django.shortcuts import redirect
     38
     39
    3040
    3141class CaracterizacionSocialView(LoginRequeridoPerAuth, TemplateView):
     
    4656
    4757        @author Lully Troconis (ltroconis at cenditel.gob.ve)
    48         @copyright GNU/GPLv2
     58        @author Manuel Zambrano
     59        @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    4960        @date 03-07-2018
     61        @date 27-08-2018
    5062        @param self <b>{object}</b> Objeto que instancia la clase
    5163        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
     
    6072                respuesta_si_no = list(RespuestaSino.objects.filter(user=self.request.user, pregunta__consulta=consulta))
    6173                si_no = si_no + respuesta_si_no
    62                 respuesta_abierta = list(RespuestaAbierta.objects.filter(user=self.request.user, pregunta__consulta=consulta))
     74                respuesta_opciones = list(RespuestaOpciones.objects.filter(user = self.request.user,opcion__pregunta__consulta = consulta))
     75                opciones = opciones + respuesta_opciones
     76                respuesta_abierta = list(RespuestaAbierta.objects.filter(user = self.request.user, pregunta__consulta = consulta))
    6377                abierta = abierta + respuesta_abierta
    64                 respuesta_ubicacion = list(RespuestaUbicacion.objects.filter(user=self.request.user, pregunta__consulta=consulta))
     78                respuesta_ubicacion = list(RespuestaUbicacion.objects.filter(user = self.request.user, pregunta__consulta = consulta))
    6579                ubicacion = ubicacion + respuesta_ubicacion
    66                 if respuesta_si_no or respuesta_abierta or respuesta_ubicacion:
     80                if respuesta_si_no or respuesta_abierta or respuesta_ubicacion or respuesta_opciones:
    6781                    consultas.append(pk)
    6882            kwargs['si_no'] = si_no
     83            kwargs['opciones'] = opciones
    6984            kwargs['abierta'] = abierta
    7085            kwargs['ubicacion'] = ubicacion
     
    7489
    7590        return super(CaracterizacionSocialView, self).get_context_data(**kwargs)
     91
     92
     93class ModificarRespuestaView(LoginRequeridoPerAuth, TemplateView):
     94    """!
     95    Clase que mustra el template y gestiona la vista para modificar una respuesta en una encuesta
     96   
     97    @author Manuel Zambrano
     98    @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     99    @date 30-08-2018
     100    @version 1.0.0
     101    """
     102
     103    template_name = 'modificar.respuesta.html'
     104    group_required = [u"Administradores", u"Voceros", u"Integrantes"]
     105
     106
     107    def get(self,*arg,**kwargs):
     108        """!
     109        Metodo que maneja las peticiones HTTP GET de la vista, Carga los valores iniciales al formulario
     110
     111        @author Manuel Zambrano
     112        @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     113        @date 30-08-2018
     114        @param self <b>{object}</b> Objeto que instancia la clase
     115        @param kwargs <b>{object}</b> Objeto que contiene las variables de la url
     116        @param arg <b>{object}</b>
     117        @return retorna los datos de contexto
     118        """
     119
     120        if kwargs['tipo'] == '1' :
     121            respuesta =  RespuestaOpciones.objects.select_related().get(
     122                                                            pk = kwargs['pk'],
     123                                                            user=self.request.user
     124                                                            )
     125            formulario = RespuestaOpcionesForm()
     126            formulario.fields['respuesta']._set_queryset(Opcion.objects.filter(
     127                                                pregunta=respuesta.opcion.pregunta
     128                                                ))
     129            formulario.fields['respuesta'].initial= respuesta.opcion
     130           
     131
     132        if kwargs['tipo'] == '4' : #Hacer para cada tipo de respuesta8
     133            respuesta = RespuestaSino.objects.select_related().get(
     134                                                            pk = kwargs['pk'],
     135                                                            user=self.request.user
     136                                                            )
     137            if respuesta.respuesta == True:
     138                formulario = RespuestaSinoForm(initial={
     139                                                    'respuesta':respuesta.respuesta,
     140                    })
     141            else:
     142                justificacion = RespuestaAbierta.objects.select_related().get(
     143                                                            user = self.request.user,
     144                                                            pregunta = respuesta.pregunta
     145                                                            )
     146                formulario = RespuestaSinoForm(initial={
     147                                                    'respuesta':respuesta.respuesta,
     148                                                    'justificacion':justificacion.texto_respuesta,
     149                    })
     150
     151        if kwargs['tipo'] == '5' :
     152            respuesta = RespuestaAbierta.objects.select_related().get(
     153                                                            pk = kwargs['pk'],
     154                                                            user=self.request.user
     155                                                            )
     156            formulario = RespuestaAbiertaForm(initial={
     157                                                'respuesta':respuesta.texto_respuesta,
     158                })
     159
     160        kwargs['formulario'] = formulario
     161        kwargs['o'] = respuesta
     162
     163
     164        return super(ModificarRespuestaView,self).get(self,**kwargs)
     165
     166    def post(self,*arg,**kwargs):
     167        """!
     168        Metodo que maneja las peticiones HTTP POST de la vista, Guarda la modificacion de la pregunta
     169
     170        @author Manuel Zambrano
     171        @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     172        @date 03-09-2018
     173        @param self <b>{object}</b> Objeto que instancia la clase
     174        @param kwargs <b>{object}</b> Objeto que contiene las variables de la url
     175        @param arg <b>{object}</b>
     176        @return Redirecciona a la tabla de ecuestas
     177        """
     178
     179        if kwargs['tipo'] == '1' :
     180            respuesta =  RespuestaOpciones.objects.select_related().get(
     181                                                            pk = kwargs['pk'],
     182                                                            user=self.request.user
     183                                                            )
     184            formulario = RespuestaOpcionesForm(self.request.POST,initial={
     185                'respuesta':respuesta.opcion,
     186                })
     187            if formulario.is_valid() and formulario.has_changed():
     188                opcion = formulario.cleaned_data['respuesta']
     189                respuesta.opcion = opcion
     190                respuesta.save()
     191
     192        if kwargs['tipo'] == '5':
     193            respuesta = RespuestaAbierta.objects.select_related().get(
     194                                                            pk = kwargs['pk'],
     195                                                            user=self.request.user
     196                                                            )
     197            formulario = RespuestaAbiertaForm(self.request.POST, initial={
     198                'respuesta':respuesta.texto_respuesta,
     199                })
     200            if formulario.is_valid() and formulario.has_changed():
     201                texto_respuesta = formulario.cleaned_data['respuesta']
     202                respuesta.texto_respuesta = texto_respuesta
     203                respuesta.save()
     204
     205        if kwargs['tipo'] == '4':
     206            respuesta = RespuestaSino.objects.select_related().get(
     207                                                            pk = kwargs['pk'],
     208                                                            user = self.request.user
     209                                                            )
     210            formulario = RespuestaSinoForm(self.request.POST)         
     211            if formulario.is_valid():
     212                if formulario.cleaned_data['respuesta'] :
     213                    respuesta.respuesta = formulario.cleaned_data['respuesta']
     214                    respuesta.save()
     215                else:   
     216                    try:
     217                        justificacion = RespuestaAbierta.objects.select_related().get(
     218                                                            user = self.request.user,
     219                                                            pregunta = respuesta.pregunta
     220                                                            )
     221                        texto_respuesta = formulario.cleaned_data['justificacion']
     222                        justificacion.texto_respuesta = texto_respuesta
     223                        justificacion.es_justificacion = True
     224                        respuesta.respuesta = formulario.cleaned_data['respuesta']
     225                        respuesta.save()
     226                        justificacion.save()
     227                    except:
     228                        justificacion = RespuestaAbierta()
     229                        justificacion.pregunta = respuesta.pregunta
     230                        justificacion.texto_respuesta = formulario.cleaned_data['justificacion']
     231                        justificacion.user = self.request.user
     232                        justificacion.es_justificacion = True
     233                        justificacion.save()
     234                        respuesta.respuesta = formulario.cleaned_data['respuesta']
     235                        respuesta.save()
     236            else :
     237                messages.error(self.request, 'Error el formulario  \
     238                                                No es Valido') #provicional, mientras se valida el formulario con js
     239        return redirect('explicacion:caracterizacion_social')
     240           
     241
     242       
     243       
     244
     245
     246
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.