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
def crea_proyecto(request): if not request.user.is_authenticated(): # Redireccionar a la pagina inicial return HttpResponseRedirect('/') else: #Comprobamos si tenemos permisos y las tareas pendientes request.session['permisos']=Roles.objects.get(tipo_rol=request.user.rol).permisos.all() request.session['tareasPendientes']=Tareas.objects.filter(estado="Pendiente",usuario=request.user) form=ProyectoForm() p='proyectos' n='creaProyecto0' miGrupos=Grupos.objects.all() miProyectos=Proyectos.objects.all() miExperimentos=Experimentos.objects.all() sql1='SELECT DISTINCT b.id, b.first_name, b.last_name, b.rol' sql2=' FROM auth_user b' sql3='' if sql3=='': sql3=sql3+' WHERE' else: sql3=sql3+' OR' sql3=sql3+' b.jefe='+str(request.user.id) if len(miGrupos)!=0: sql2=sql2+', auth_user_grupos a' if sql3=='': sql3=sql3+' WHERE' else: sql3=sql3+' OR' 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)+'))' if len(miProyectos)!=0: sql2=sql2+', "Proyectos_usuarios" c' if sql3=='': sql3=sql3+' WHERE' else: sql3=sql3+' OR' 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)+'))' if len(miExperimentos)!=0: sql2=sql2+', "Experimentos_usuarios" d' if sql3=='': sql3=sql3+' WHERE' else: sql3=sql3+' OR' 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)+'))' if sql3=='': sql3=sql3+' WHERE' else: sql3=sql3+' AND' sql3=sql3+' NOT b.rol LIKE \'Administrador\'' sql=sql1+sql2+sql3 cursor1=connection.cursor() cursor1.execute(sql) usuarios=cursor1.fetchall() cursor3=connection.cursor() 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) cursor3.execute(sql) documentos=cursor3.fetchall() cursor2=connection.cursor() 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' cursor2.execute(sql) tareas=cursor2.fetchall() proyectos=Proyectos.objects.filter(estado='Activo',usuarios=request.user) experimentos=Experimentos.objects.filter(estado='Activo',usuarios=request.user) if request.method=='POST': form=ProyectoForm(request.POST) if not form.errors: if(request.POST['usuarios']==''): error='Debes elegir al menos un usuario al que se le asigne el proyecto.' 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}) else: #Vamos a rellenar todos los campos por los que esté formado el modelo for i in request.POST.getlist('usuarios'): usuario=User.objects.get(id=i) fila=Proyectos(titulo=request.POST['titulo'],objetivo=request.POST['objetivo'],autor=request.user.id,estado='Pendiente',porcentaje=0) fila.save() if(request.POST['documentos']!=''): fila.documentos=request.POST.getlist('documentos') #if(request.POST['proyectos']!=''): # fila.proyectos_rel=request.POST.getlist('proyectos') # fila.save() if(request.POST['proyectos']!=''): fila.proyectos_rel=Proyectos.objects.get(id=request.POST['proyectos']) fila.proyectos_rel.save() if(request.POST['experimentos']!=''): fila_experimentos=Proyectos_Experimentos(proyecto=fila,experimento=Experimentos.objects.get(id=request.POST['experimentos'])) fila_experimentos.save() request.session['mensaje']='Proyecto creado.' request.session['tipo']='confirmacion' return HttpResponseRedirect('/') else: error='Por favor, introduce correctamente los campos.' 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}) else: 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
class Proyectos(models.Model): titulo=models.CharField(max_length=100) creacion=models.DateField(default=datetime.datetime.now) estado=models.CharField(max_length=30) objetivo=models.TextField(null=True) conclusion=models.TextField(null=True) porcentaje=models.IntegerField() modificado=models.DateTimeField(default=datetime.datetime.now) autor=models.IntegerField() usuarios=models.ManyToManyField(User) proyectos_rel=models.ManyToManyField("self") documentos=models.ManyToManyField(Documentos) class Meta: db_table='Proyectos' def __unicode__(self): return self.titulo class Proyectos_Grupos(models.Model): proyecto=models.ForeignKey(Proyectos,primary_key=True) grupo=models.ForeignKey(Grupos) class Meta: db_table='Proyectos_grupos'
La html es la siguiente:
Código HTML:
Ver original
{% block contenido %} {% if error %} <p class="highlight-1"> {{ error }} </p> {% endif %} <form action="." method="POST"> {{ form.titulo }} {{ form.objetivo }} <select name="usuarios" multiple="multiple" size="10"> {% for i in usuarios %} {% endfor %} </select> <select name="documentos" multiple="multiple" size="10"> {% for i in documentos %} {% endfor %} </select> <select id="proyectosSelect" name="proyectos" size="10"> {% for i in proyectos %} {% endfor %} </select> <select id="experimentosSelect" name="experimentos" size="10"> </select> <input class="button" type="submit" value="Crear proyecto" /> </form> <script> muestraExperimentos(); </script> {% 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.