def editObjeto(request,id_objeto):
    """
    Vista de acceso al usuario con rol de Docente, de esta manera se le permitirá modificar objetos
    """
    obj=get_object_or_404(Objeto, pk=int(id_objeto))
    kws=obj.palabras_claves.all()#palabras claves del objeto
    if request.user.profile.rol == 'rdoc':
        if obj.creador == request.user:
            error1 = False
            errores = False
            l_errores=[]
            gruposu = request.user.groups.all()
            esp=obj.espec_lom
            l_autores = request.POST.getlist('autores1')
            autores = obj.autores.all()
            lista_autores=[]#lista para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar.
            lista_temporal=[]#lista temporal con los datos de los autores sin el caracter - para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar.
            if request.method == 'POST':
                if not request.POST.getlist('autores1'):
                    l_errores.append('No incluyó autores al objeto.')
                    error1=True
                if len(l_autores[0])==0:
                    l_errores.append('No incluyó autores al objeto.')
                    error1=True
                if not request.POST.get('palabras_claves'):
                    l_errores.append('No incluyó palabras claves al objeto.')
                    error1=True
                formularioEsp = EspecificacionForm(request.POST, instance=esp)
                formularioObj = cObjetosForm(request.user, obj, request.POST, request.FILES, instance=obj)
                if not error1:
                    if formularioEsp.is_valid() & formularioObj.is_valid():
                        formularioEsp.save()
                        pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas
                        re = formularioObj.cleaned_data['repositorio']#se toma el repositorio
                        f=formularioObj.save(commit=False)#se guarda un instancia temporal
                        lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios
                        for l in lpc:
                            p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista
                            if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla
                                p.save() #se guarda la palabra clave en la bd
                            f.palabras_claves.add(p) # se añade cada palabra clave al objeto
                        for kw in kws: #Se recorretodo el conjunto de palabras claves del objeto
                            if kw.palabra_clave not in lpc: #se valida si cada palabra clave todavía se mantiene en lo que el usuario digitó
                                f.palabras_claves.remove(kw) #de no encontrarse la palabra clave debe desasociarse aunque no eliminarse.
                        for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto
                            lista_autores=l.split(',') #se divide la lista por comas que representa cada string de campos del autor
                            for st in lista_autores: # se recorre cada autor
                                lista_temporal.append(st.replace('-',' '))
                                s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista
                                aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' '))
                                if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo
                                    aut.save() #se guarda el autor en la bd
                                f.autores.add(aut) # se añade al campo manytomany con Autores.
                        for autor in autores: #Se recorretodo el conjunto de autores del objeto
                            cadena_temporal=autor.nombres+' '+autor.apellidos+' '+autor.rol #cadena que concatena los datos del autor para compararlos con la lista que el usuario digita
                            if cadena_temporal not in lista_temporal: #se valida si cada autor todavía se mantiene en lo que el usuario digitó
                                f.autores.remove(autor) #de no encontrarse el autor, debe desasociarse aunque no eliminarse.
                        f.repositorio=re
                        f.save()
                        #messages.add_message(request, messages.SUCCESS, 'Cambios Actualizados Exitosamente')# no funciona al redireccionar
                        return HttpResponseRedirect('/objeto/'+str(obj.pk))
                    else:
                        errores=True
            else:
                formularioEsp = EspecificacionForm(instance=esp)
                formularioObj = cObjetosForm(request.user, obj, instance=obj)
            return render_to_response('editObjeto.html',{'objeto':obj,'usuario':request.user,'formObj':formularioObj,'formEsp':formularioEsp,'autores':autores,'errores':errores,'l_errores':l_errores},context_instance=RequestContext(request))
        else:
            return HttpResponseRedirect('/')
    else:
        return HttpResponseRedirect('/')
def docObjeto(request):
    """
    Vista de acceso al usuario con rol de Docente, de esta manera se le permitirá crearobjetos
    """
    if request.user.profile.rol == 'rdoc':
        objetos = Objeto.objects.filter(creador=request.user.id)
        gruposu = request.user.groups.all()
        errores = False
        error1 = False
        l_errores=[]
        if request.method == 'POST':
            if not request.POST.get('autores1'):
                l_errores.append('No incluyó autores al objeto.')
                error1=True
            if not request.POST.get('palabras_claves'):
                l_errores.append('No incluyó palabras claves al objeto.')
                error1=True

            if not request.POST.get('repositorio'):
                l_errores.append('No seleccionó repositorio. Si no hay repositorios asociados, consulte a un administrador del sistema para agregar alguno.')
                error1=True
            l_autores = request.POST.getlist('autores1')
            formularioEsp = EspecificacionForm(request.POST)
            formularioObj = ObjetosForm(gruposu, request.POST, request.FILES)
            if not error1:
                if formularioEsp.is_valid():#si es válido el formularo de especificaciónLOM
                    if formularioObj.is_valid():#si el válido el objeto
                        esp=formularioEsp.save()#se guarda la especificaciónLOM primero
                        pc = formularioObj.cleaned_data['palabras_claves']#se toman las palabras claves digitadas
                        re = formularioObj.cleaned_data['repositorio']#se toma el repositorio
                        f=formularioObj.save(commit=False)#se guarda un instancia temporañ
                        f.espec_lom = esp # se asocia el objeto con su especificaciónLOM
                        f.creador=request.user # Se asocia el objeto con el usuario que lo crea
                        f.repositorio=re
                        f.save() # se guarda el objeto en la base de datos.
                        if ',' in pc: #si hay comas en las palabras claves
                            lpc=[x.strip() for x in pc.split(',')] # se utilizan las palabras claves como una lista de palabras separadas sin comas ni espacios
                        else:
                            lpc=[x.strip() for x in pc.split(' ')] # se utilizan las palabras claves como una lista de palabras separadas sin espacios
                        for l in lpc:
                            p,b=PalabraClave.objects.get_or_create(palabra_clave=l) # Se crea una palabra clave por cada palabra en la lista
                            if not b: #Si ya existe la palabra entonces se obvia el proceso de crearla
                                p.save() #se guarda la palabra clave en la bd
                            f.palabras_claves.add(p) # se añade cada palabra clave al objeto
                        for l in l_autores: #como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto
                            stri=l.split(',') #se divide la lista por comas que representa cada string de campos del autor
                            for st in stri: # se recorre cada autor
                                s=st.split(' ') # se divide los campos nombres, apellidos y rol en una lista
                                aut,cr=Autor.objects.get_or_create(nombres=s[0].replace('-',' '), apellidos=s[1].replace('-',' '), rol=s[2].replace('-',' '))
                                if not cr: #Si ya existe el autor entonces se obvia el proceso de crearlo
                                    aut.save() #se guarda el autor en la bd
                                f.autores.add(aut) # se añade al campo manytomany con Autores.
                        messages.add_message(request, messages.SUCCESS, 'Objeto Agregado Exitosamente')
                        formularioObj=ObjetosForm(gruposu)
                        formularioEsp=EspecificacionForm()
                    else:
                        errores=True
                else:
                    errores = True
        else:
            formularioObj=ObjetosForm(gruposu)
            formularioEsp=EspecificacionForm()

        return render_to_response('docente.html',{'usuario':request.user,'objetos':objetos,'formObj':formularioObj,'formEsp':formularioEsp,'errores':errores,'l_errores':l_errores},context_instance=RequestContext(request))
    else:
        return HttpResponseRedirect('/')