Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] No guarda

Estas en el tema de No guarda en el foro de Python en Foros del Web. Buenos días muchachos, una vez más recurriendo a sus conocimientos y su loable ayuda; resulta que Tengo mi vista: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original ...
  #1 (permalink)  
Antiguo 31/03/2015, 22:32
Avatar de santiagopm84  
Fecha de Ingreso: marzo-2015
Mensajes: 23
Antigüedad: 9 años, 8 meses
Puntos: 0
No guarda

Buenos días muchachos, una vez más recurriendo a sus conocimientos y su loable ayuda; resulta que


Tengo mi vista:

Código Python:
Ver original
  1. @login_required
  2. def agregar_tarea(request, id_actividad):
  3.     tarea = ProgramacionActividades.objects.filter(actividad_id = id_actividad)
  4.     # for t in tarea:
  5.     #     temp = t
  6.     # temp =temp
  7.     total = tarea.count()
  8.     total = total + 1
  9.     nueva_tarea = 'CT-'+str(id_actividad) +'-'+ str(total)
  10.     print nueva_tarea
  11.     if request.method == 'POST':
  12.         formulario = ProgramacionaddForm(request.POST)
  13.         if formulario.is_valid():
  14.             a = formulario.save(commit=False)
  15.             a.unidad_trabajo = nueva_tarea
  16.             a.save()
  17.             msj = 'La tarea se guardó Correctamente.'
  18.             messages.success(request, msj)
  19.             return HttpResponseRedirect('/catalogos/detalle_programacion/%s' % id_actividad)
  20.         else:
  21.             msj = 'Error'
  22.             messages.error(request, msj)
  23.             return HttpResponseRedirect('/catalogos/agregar_tarea/%s' % id_actividad)
  24.     else:
  25.         formulario = ProgramacionaddForm()
  26.  
  27.     contexto = {'formulario': formulario, 'total': total, 'nuevatarea': nueva_tarea}
  28.  
  29.     return render_to_response('Catalogos/programacion_agregar.html', contexto, context_instance=RequestContext(request))



Tengo mi modelo:

Código Python:
Ver original
  1. class ProgramacionActividades(models.Model):
  2.     actividad = models.ForeignKey(Actividades)
  3.     unidad_trabajo = models.CharField(max_length=250)
  4.     hora_inicio =models.TimeField()
  5.     hora_fin = models.TimeField()
  6.     fecha =models.DateField()
  7.     capacidad = models.IntegerField()
  8.     total_horas = models.IntegerField()
  9.     estatus = models.ForeignKey(Estatus)
  10.     cid = models.IntegerField(default=1)
  11.     activo = models.IntegerField(default=1)
  12.     fecha_registro=models.DateField(auto_now_add=True)
  13.     usuario = models.ForeignKey(User)
  14.  
  15.  
  16.     class Meta:
  17.         verbose_name ="ProgramacionActividades"
  18.         verbose_name_plural ="ProgramacionActividades"
  19.         db_table="programacion_actividades"
  20.  
  21.     def __unicode__(self):
  22.         return "%s - %s - %s -%s" %(self.actividad.centro_asistencial.nombre,self.actividad.proyecto.nombre,self.hora_inicio,self.hora_fin)


tengo mi form:

Código Python:
Ver original
  1. class ProgramacionaddForm(forms.ModelForm):
  2.     class Meta:
  3.         model = ProgramacionActividades
  4.         exclude =['cid','activo','fecha_registro','usuario','estatus','actividad']

y tengo mi template:

Código HTML:
Ver original
  1. {% extends "base.html" %} <!-- Esta parte del codigo invoca al archivo base.html donde se encuentran los estilos y scripts -->
  2.  
  3.  
  4. {% block camino %} <!-- Bloque para el camino de hormigas -->
  5.  
  6. <li class=""><a href="dashboard.html"><i class="icon-home"></i>ayuda</a></li>
  7.  
  8. {% endblock camino %}
  9.  
  10. {% block contenedor %} <!-- Bloque para el contenido -->
  11. <div class="span6">
  12.     <div class="span12">
  13.         {% if messages %}
  14.         <div class="messages">
  15.             {% for message in messages %}
  16.                 <div{% if message.tags %} class="dgtic-message {{ message.tags }}"{% endif %}>{{ message }}</div>
  17.             {% endfor %}
  18.         </div>
  19.         {% endif %}
  20.     <div class="dgtic-panel">
  21.         <div class="dgtic-panel-header">
  22.             <span class="dgtic-panel-title">
  23.                 <i class="icol-add"></i> Agregar Nueva Tarea
  24.             </span>
  25.         </div>
  26.         <div class="dgtic-panel-content dgtic-form-container">
  27.             <form id="registro_tipo_actividad" class="dgtic-form" method="POST">{% csrf_token %}
  28.                     {% csrf_token %}
  29.                     <div id="dgtic-ex-val1-error" class="dgtic-message error" style="display:none;"></div>
  30.                         <div class="dgtic-form-inline">
  31.                         <!--<div class="dgtic-form-row">
  32.                            <label class="dgtic-form-label">Centro Asistencial: </label>
  33.                            <div class="dgtic-form-item large">
  34.                                <font color="blue">{{t.actividad}}</font>
  35.                            </div>
  36.                        </div>
  37.                        <div class="dgtic-form-row">
  38.                            <label class="dgtic-form-label">Unidad de Trabajo a<span class="required">*</span></label>
  39.                            <div class="dgtic-form-item large">
  40.                                {{nuevatarea}}
  41.                            </div>
  42.                        </div>-->
  43.                         <div class="dgtic-form-row">
  44.                             <label class="dgtic-form-label">Hora Inicio <span class="required">*</span></label>
  45.                             <div class="dgtic-form-item large">
  46.                                 {{formulario.hora_inicio}}
  47.                                 {% for error in formulario.tipo_actividad.errors %}
  48.                                   <span class="errorMessage">{{error}}</span>
  49.                                 {% endfor %}
  50.                             </div>
  51.                              <span id="error" style="color:red;"></span>
  52.                              <span id="error2" style="color:red;"></span>
  53.                         </div>
  54.                         <div class="dgtic-form-row">
  55.                             <label class="dgtic-form-label">Hora Fin <span class="required">*</span></label>
  56.                             <div class="dgtic-form-item large">
  57.                                 {{formulario.hora_fin}}
  58.                                 {% for error in formulario.descripcion.errors %}
  59.                                   <span class="errorMessage">{{error}}</span>
  60.                                 {% endfor %}
  61.                             </div>
  62.                         </div>
  63.                         <div class="dgtic-form-row">
  64.                             <label class="dgtic-form-label">Fecha:</label>
  65.                             <div class="dgtic-form-item large">
  66.                                 <font color="blue">{{formulario.fecha}}</font>
  67.                             </div>
  68.                         </div>
  69.                         <div class="dgtic-form-row">
  70.                             <label class="dgtic-form-label">Capacidad<span class="required">*</span></label>
  71.                             <div class="dgtic-form-item large">
  72.                                 {{formulario.capacidad}}
  73.                                 {% for error in formulario.horas_grupo.errors %}
  74.                                   <span class="errorMessage">{{error}}</span>
  75.                                 {% endfor %}
  76.                             </div>
  77.                         </div>
  78.                         <div class="dgtic-form-row">
  79.                             <label class="dgtic-form-label">Total Horas<span class="required">*</span></label>
  80.                             <div class="dgtic-form-item large">
  81.                                 {{formulario.total_horas}}
  82.                                 {% for error in formulario.capacidad.errors %}
  83.                                   <span class="errorMessage">{{error}}</span>
  84.                                 {% endfor %}
  85.                             </div>
  86.                         </div>
  87.                 <div class="btn-row">
  88.                     <input type="button"value="Cancelar" onclick="history.go(-1)" class="btn btn-danger">
  89.                     <input type="submit" value="Guardar" class="btn btn-success">
  90.                 </div>
  91.             </form>
  92.         </div>
  93.     </div>
  94. </div>
  95.  
  96. {% endblock contenedor %}
  97.  
  98. {% block jquery %}
  99. <script type="text/javascript">
  100. $(document).ready(function(){
  101.     $("#id_hora_inicio").prop("type", "time");
  102.     $("#id_hora_fin").prop("type", "time");
  103.     $("#id_total_horas").attr('readonly','readonly');
  104.  
  105.     var hora_i_a ="{{t.hora_inicio}}"
  106.     var hora_f_a ="{{t.hora_fin}}"
  107.     var total_h_a ="{{t.total_horas}}"
  108.  
  109.     $("#id_hora_inicio,#id_hora_fin").blur(function(){
  110.     var fin = $("#id_hora_fin").val();
  111.     var inicio = $('#id_hora_inicio').val();
  112.     var error = 'la hora final no debe ser menor que la de inicio';
  113.     if (fin != '' && inicio != ''){
  114.        if (fin < inicio){
  115.            mensaje ="La Hora de Inicio no puede ser Mayor a la Final"
  116.             $("#id_hora_fin").val(hora_f_a);
  117.              $('#id_total_horas').val(total_h_a);
  118.             $("#error").html(mensaje)
  119.         }else{
  120.             $('#error').html('');
  121.             var total = (parseInt(fin) - parseInt(inicio));
  122.             $('#id_total_horas').val(total);
  123.         }
  124.         if((inicio<hora_i_a) || (inicio>hora_f_a))
  125.         {
  126.             //$("#id_hora_inicio").val(hora_i_a)
  127.         }
  128.         if ((fin > hora_f_a)|| (fin<hora_i_a))
  129.        {
  130.            //$("#id_hora_fin").val(hora_f_a)
  131.        }
  132.  
  133.    }
  134. });
  135.  
  136. });
  137. $('#id_fecha').datepicker({
  138.    dateFormat: "yy-mm-dd",  //"dd/mm/yy",
  139.    changeMonth: true,
  140.    changeYear: true,
  141.    dayNamesMin: ["D","L","M","M","J","V","S"],
  142.    monthNamesShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sept", "Oct", "Nov", "Dic"],
  143.    yearRange: '1900:2020'
  144. });
  145.  
  146. {% endblock %}

Según mi lógica todo está bien, peeero simplemente no guarda.

En el archivo forms.py excluyo como indico ahi algunos campos para que no los tome en cuenta al guardar.

Le envío a.unidad_trabajo = nueva_tarea que es u registro que quiero que se guarde junto con los que se capturan en el formulario, pero insisto y repito, NO guarda.

No se que pueda ser.

Como siempre agradezco su apoyo y soporte.

Saludos
  #2 (permalink)  
Antiguo 31/03/2015, 22:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: No guarda

Si, bueno esto es lo que pasa es que tienes que ser muy cuidadoso cuando excluyes campos en un ModelForm.

Basicamente esto te esta pasando.
http://stackoverflow.com/questions/5...excluded-field

Solución: (En tu vista)
Código Python:
Ver original
  1. instance = ProgramacionActividades(unidad_trabajo=nueva_tarea)
  2. if request.method == 'POST':
  3.     formulario = ProgramacionaddForm(request.POST, instance=instance)
  4.     if formulario.is_valid():
  5.         form.save()
  6.         msj = 'La tarea se guardó Correctamente.'
  7.         messages.success(request, msj)
  8.         return HttpResponseRedirect('/catalogos/detalle_programacion/%s' % id_actividad)
  9.     else:
  10.         msj = 'Error'
  11.         messages.error(request, msj)
  12.         return HttpResponseRedirect('/catalogos/agregar_tarea/%s' % id_actividad)
  13. else:
  14.     formulario = ProgramacionaddForm(instance=instance)
Posiblemente ahora si te salte un error, el cual te obligue a ajustar mas campos.

Última edición por razpeitia; 01/04/2015 a las 10:10
  #3 (permalink)  
Antiguo 01/04/2015, 10:04
Avatar de santiagopm84  
Fecha de Ingreso: marzo-2015
Mensajes: 23
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: No guarda

¡¡Hola razpeitia!!

Modifiqué la vista, a como sugieres, pero sigue sin poder guardar. El articulo de la instancia comprendí, así está otra vista, pero en esa se edita la tarea.

Agradezco mucho tu ayuda
  #4 (permalink)  
Antiguo 06/04/2015, 11:09
Avatar de santiagopm84  
Fecha de Ingreso: marzo-2015
Mensajes: 23
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: No guarda

Listo ha quedado resuelto, no entendía las última líneas de tu comentario razpeitia, pero ya quedó resuelto
  #5 (permalink)  
Antiguo 06/04/2015, 11:15
Avatar de santiagopm84  
Fecha de Ingreso: marzo-2015
Mensajes: 23
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: No guarda

Esta fue mi solución:

Código Python:
Ver original
  1. def agregar_tarea(request, id_actividad):
  2.     tarea = ProgramacionActividades.objects.filter(actividad_id = id_actividad)
  3.     # for t in tarea:
  4.     #     temp = t
  5.     # temp =temp
  6.     total = tarea.count()
  7.     total = total + 1
  8.     nueva_tarea = 'CT-'+str(id_actividad) +'-'+ str(total)
  9.     print nueva_tarea
  10.     #instance = ProgramacionActividades(unidad_trabajo=nueva_tarea)
  11.     if request.method == 'POST':
  12.         formulario = ProgramacionaddForm(request.POST) #, instance=instance)
  13.         if formulario.is_valid():
  14.             a = formulario.save(commit=False)
  15.             a.unidad_trabajo = nueva_tarea
  16.             ########Agregué o inserté manualmente estos valores##########
  17.             a.actividad_id = id_actividad
  18.             a.estatus_id = 5
  19.             a.usuario_id = request.user.id
  20.            #######################################################
  21.             a.save()
  22.             msj = 'La tarea se guardó Correctamente.'
  23.             messages.success(request, msj)
  24.             return HttpResponseRedirect('/catalogos/detalle_programacion/%s' % id_actividad)
  25.        
  26.     else:
  27.         formulario = ProgramacionaddForm()#(instance=instance)
  28.  
  29.     contexto = {'formulario': formulario, 'total': total, 'nuevatarea': nueva_tarea}
  30.  
  31.     return render_to_response('Catalogos/programacion_agregar.html', contexto, context_instance=RequestContext(request))


Y listo guarda el registro perfectameente

Etiquetas: ip, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.