Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/10/2011, 12:08
joseosuna2
 
Fecha de Ingreso: octubre-2011
Ubicación: Alcobendas
Mensajes: 33
Antigüedad: 13 años, 1 mes
Puntos: 1
Lio mental varias funciones

Hola soy nuevo en el foro, pero pienso estar acompañando mucho tiempo xD, tengo un cacao con el que llevo varios dias sin dar con la tecla, ya que necesito aclararme algunos conceptos.
El tema es que utilizo Django, he implementado una plantilla html para recoger una serie de datos, y estoy programando la plantilla views.py que tiene la sig estructura:


Código Python:
Ver original
  1. def crea_proyecto(request):
  2.     if not request.user.is_authenticated():
  3.         # Redireccionar a la pagina inicial
  4.         return HttpResponseRedirect('/')
  5.     else:
  6.         #Comprobamos si tenemos permisos y las tareas pendientes
  7.         request.session['permisos']=Roles.objects.get(tipo_rol=request.user.rol).permisos.all()
  8.         request.session['tareasPendientes']=Tareas.objects.filter(estado="Pendiente",usuario=request.user)
  9.         form=ProyectoForm()
  10.         p='proyectos'
  11.         n='creaProyecto0'
  12.         miGrupos=Grupos.objects.all()
  13.         miProyectos=Proyectos.objects.all()
  14.         miExperimentos=Experimentos.objects.all()
  15.         sql1='SELECT DISTINCT b.id, b.first_name, b.last_name, b.rol'
  16.         sql2=' FROM auth_user b'
  17.         sql3=''
  18.         if sql3=='':
  19.             sql3=sql3+' WHERE'
  20.         else:
  21.             sql3=sql3+' OR'
  22.         sql3=sql3+' b.jefe='+str(request.user.id)
  23.         if len(miGrupos)!=0:
  24.             sql2=sql2+', auth_user_grupos a'
  25.             if sql3=='':
  26.                 sql3=sql3+' WHERE'
  27.             else:
  28.                 sql3=sql3+' OR'
  29.             sql3=sql3+' (a.user_id=b.id AND a.grupos_id= ANY (SELECT grupos_id FROM auth_user_grupos WHERE user_id='+str(request.user.id)+'))'
  30.         if len(miProyectos)!=0:
  31.             sql2=sql2+', "Proyectos_usuarios" c'
  32.             if sql3=='':
  33.                 sql3=sql3+' WHERE'
  34.             else:
  35.                 sql3=sql3+' OR'
  36.             sql3=sql3+' (c.user_id=b.id AND c.proyectos_id= ANY (SELECT proyectos_id FROM "Proyectos_usuarios" WHERE user_id='+str(request.user.id)+'))'
  37.         if len(miExperimentos)!=0:
  38.             sql2=sql2+', "Experimentos_usuarios" d'
  39.             if sql3=='':
  40.                 sql3=sql3+' WHERE'
  41.             else:
  42.                 sql3=sql3+' OR'
  43.             sql3=sql3+' (d.user_id=b.id AND d.experimentos_id= ANY (SELECT experimentos_id FROM "Experimentos_usuarios" WHERE user_id='+str(request.user.id)+'))'
  44.         if sql3=='':
  45.             sql3=sql3+' WHERE'
  46.         else:
  47.             sql3=sql3+' AND'
  48.         sql3=sql3+' NOT b.rol LIKE \'Administrador\''
  49.         sql=sql1+sql2+sql3
  50.         cursor1=connection.cursor()
  51.         cursor1.execute(sql)
  52.         usuarios=cursor1.fetchall()
  53.         cursor3=connection.cursor()
  54.         sql='SELECT DISTINCT id, tipo, uso, nombre_documento FROM "Documentos" WHERE NOT uso LIKE \'prfl\' AND NOT uso LIKE \'logo\' AND autor_id='+str(request.user.id)
  55.         cursor3.execute(sql)
  56.         documentos=cursor3.fetchall()
  57.         cursor2=connection.cursor()
  58.         sql='SELECT DISTINCT a.id, a.titulo, b.first_name, b.last_name FROM "Tareas" a, auth_user b WHERE (a.usuario_id='+str(request.user.id)+' OR a.autor='+str(request.user.id)+') AND b.id=a.usuario_id'
  59.         cursor2.execute(sql)
  60.         tareas=cursor2.fetchall()
  61.         proyectos=Proyectos.objects.filter(estado='Activo',usuarios=request.user)
  62.         experimentos=Experimentos.objects.filter(estado='Activo',usuarios=request.user)
  63.         if request.method=='POST':
  64.             form=ProyectoForm(request.POST)
  65.             if not form.errors:
  66.                 if(request.POST['usuarios']==''):
  67.                     error='Debes elegir al menos un usuario al que se le asigne el proyecto.'
  68.                     return render_to_response('claboratorio/crea_proyecto.html',{'movil':request.session['movil'],'usuario':request.user,'permisos':request.session['permisos'],'tareasPendientes':request.session['tareasPendientes'],'form':form,'p':p,'n':n,'usuarios':usuarios,'documentos':documentos,'tareas':tareas,'proyectos':proyectos,'experimentos':experimentos,'error':error})
  69.                 else:
  70.                     #Vamos a rellenar todos los campos por los que esté formado el modelo
  71.                                                
  72.                     for i in request.POST.getlist('usuarios'):     
  73.                         usuario=User.objects.get(id=i)
  74.                         fila=Proyectos(titulo=request.POST['titulo'],objetivo=request.POST['objetivo'],autor=request.user.id,estado='Pendiente',porcentaje=0)
  75.                         fila.save()
  76.                         if(request.POST['documentos']!=''):
  77.                             fila.documentos=request.POST.getlist('documentos')
  78.                         #if(request.POST['proyectos']!=''):
  79.                         #   fila.proyectos_rel=request.POST.getlist('proyectos')
  80.                         #   fila.save()
  81.                         if(request.POST['proyectos']!=''):
  82.                             fila.proyectos_rel=Proyectos.objects.get(id=request.POST['proyectos'])
  83.                             fila.proyectos_rel.save()
  84.                        
  85.                         if(request.POST['experimentos']!=''):
  86.                             fila_experimentos=Proyectos_Experimentos(proyecto=fila,experimento=Experimentos.objects.get(id=request.POST['experimentos']))
  87.                             fila_experimentos.save()
  88.                     request.session['mensaje']='Proyecto creado.'
  89.                     request.session['tipo']='confirmacion'
  90.                     return HttpResponseRedirect('/')
  91.             else:
  92.                 error='Por favor, introduce correctamente los campos.'
  93.                 return render_to_response('claboratorio/crea_proyecto.html',{'movil':request.session['movil'],'usuario':request.user,'permisos':request.session['permisos'],'tareasPendientes':request.session['tareasPendientes'],'form':form,'p':p,'n':n,'usuarios':usuarios,'documentos':documentos,'tareas':tareas,'proyectos':proyectos,'experimentos':experimentos,'error':error})
  94.         else:
  95.             return render_to_response('claboratorio/crea_proyecto.html',{'movil':request.session['movil'],'usuario':request.user,'permisos':request.session['permisos'],'tareasPendientes':request.session['tareasPendientes'],'form':form,'p':p,'n':n,'usuarios':usuarios,'documentos':documentos,'tareas':tareas,'proyectos':proyectos,'experimentos':experimentos})


Y como Models.py lo siguiente:

Código Python:
Ver original
  1. class Proyectos(models.Model):
  2.     titulo=models.CharField(max_length=100)
  3.     creacion=models.DateField(default=datetime.datetime.now)
  4.     estado=models.CharField(max_length=30)
  5.     objetivo=models.TextField(null=True)
  6.     conclusion=models.TextField(null=True)
  7.     porcentaje=models.IntegerField()
  8.     modificado=models.DateTimeField(default=datetime.datetime.now)
  9.     autor=models.IntegerField()
  10.     usuarios=models.ManyToManyField(User)
  11.     proyectos_rel=models.ManyToManyField("self")
  12.     documentos=models.ManyToManyField(Documentos)
  13.     class Meta:
  14.         db_table='Proyectos'
  15.     def __unicode__(self):
  16.         return self.titulo
  17.  
  18. class Proyectos_Grupos(models.Model):
  19.     proyecto=models.ForeignKey(Proyectos,primary_key=True)
  20.     grupo=models.ForeignKey(Grupos)
  21.     class Meta:
  22.         db_table='Proyectos_grupos'

La html es la siguiente:
Código HTML:
Ver original
  1. {% block contenido %}
  2.     <h1>Crear proyecto</h1>
  3.     {% if error %}
  4.         <p class="highlight-1">
  5.             <strong>Error:</strong>
  6.             {{ error }}
  7.         </p>
  8.     {% endif %}
  9.     <form action="." method="POST">
  10.         <label for="id_titulo">Título:</label>{{ form.titulo.errors }}
  11.         {{ form.titulo }}
  12.        
  13.         <label for="id_objetivo">Objetivo:</label>{{ form.objetivo.errors }}
  14.         {{ form.objetivo }}
  15.        
  16.         <label>Proyecto asignado a:</label>
  17.         <select name="usuarios" multiple="multiple" size="10">
  18.             <option value="" selected="selected">Ninguno</option>
  19.             {% for i in usuarios %}
  20.                 <option value="{{ i.0 }}">{{ i.1 }} {{ i.2 }} ({{ i.3 }})</option>
  21.             {% endfor %}
  22.         </select>
  23.        
  24.        
  25.         <label>Documentos relacionados:</label>
  26.         <select name="documentos" multiple="multiple" size="10">
  27.             <option value="" selected="selected">Ninguno</option>
  28.             {% for i in documentos %}
  29.                 <option value="{{ i.0 }}">{{ i.2 }} ({{ i.1 }}) - {{ i.3 }}</option>
  30.             {% endfor %}
  31.         </select>
  32.        
  33.         <label>Proyectos relacionados:</label>
  34.         <select id="proyectosSelect" name="proyectos" size="10">
  35.             <option value="" selected="selected" onclick="muestraExperimentos();">Ninguno</option>
  36.             {% for i in proyectos %}
  37.                 <option value="{{ i.id }}" onclick="muestraExperimentos();">{{ i.titulo }}</option>
  38.             {% endfor %}
  39.         </select>
  40.                
  41.         <label>Experimentos relacionados:</label>
  42.         <select id="experimentosSelect" name="experimentos" size="10">
  43.         </select>
  44.         <input class="button" type="submit" value="Crear proyecto" />
  45.     </form>
  46.     <script>
  47.         muestraExperimentos();
  48.     </script>
  49. {% endblock %}



El caso que no consigo hacer que se muestre la lista de 'proyectos' ni tampoco asignarle a la variable usuarios=models.ManyToManyField(User) los usuarios que selecciono en el html.
Agracederia mucho sus explicaciones, ya que llevo unos dias atrancado, y no me entero...espero serles de ayuda más adelante.
Gracias.