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 originaldef 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 originalclass 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 %}
{{ error }}
{% endif %}
<form action="." method="POST"> <label for="id_titulo">Título:
</label>{{ form.titulo.errors }}
{{ form.titulo }}
<label for="id_objetivo">Objetivo:
</label>{{ form.objetivo.errors }}
{{ form.objetivo }}
<select name="usuarios" multiple="multiple" size="10"> {% for i in usuarios %}
<option value="{{ i.0 }}">{{ i.1 }} {{ i.2 }} ({{ i.3 }})
</option> {% endfor %}
<select name="documentos" multiple="multiple" size="10"> {% for i in documentos %}
<option value="{{ i.0 }}">{{ i.2 }} ({{ i.1 }}) - {{ i.3 }}
</option> {% endfor %}
<select id="proyectosSelect" name="proyectos" size="10"> <option value="" selected="selected" onclick="muestraExperimentos();">Ninguno
</option> {% for i in proyectos %}
<option value="{{ i.id }}" onclick="muestraExperimentos();">{{ i.titulo }}
</option> {% endfor %}
<select id="experimentosSelect" name="experimentos" size="10"> <input class="button" type="submit" value="Crear proyecto" /> muestraExperimentos();
{% 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.