def modif_liens(request): try: cible=Graphe_competences.objects.get(id=request.POST['cible']) except: return {'success':False,'msg':u'Compétence liée inexistante'} cibles=Graphe_competences.objects.filter(competence__id=cible.competence_id,graphe__lte=cible.graphe) #on charge le queryset et on calcule le nombre de cibles nb_cibles=len(cibles) #origine=Graphe_competences.objects.get(competence=request.POST['origine_id'],graphe=request.POST['origine_graphe']) origines=Graphe_competences.objects.filter(competence=request.POST['origine_id'],graphe__lte=request.POST['origine_graphe']) #recherche si des liens existent déjà lien=False for c in cibles: for o in origines: if o.is_child_of(c): lien=True break if lien: return {'success':False,'msg':u'Lien entre compétence %s et %s déjà existant' %(cible.competence_id,request.POST['origine_id'])} orig_temp=origines.filter(graphe=request.POST['origine_graphe']) if len(orig_temp)==0: return {'success':False,'msg':u'Compétence inexistante'} else: origine=orig_temp[0] if request.POST['type']=='append': type_lien='E' else: type_lien='D' nb=0 for cible in cibles: nb+=1 # on prépare les liens avec un lien temporaire pour les retrouver Graphe_competences.creer_lien(cible,origine, 'TMP') # on met à jour les liens en rajoutant l'utilisateur Graphe_competences.objects.filter(type_lien='TMP').update(user=request.user,type_lien=type_lien) return {'success':(nb==nb_cibles),'msg':u'%s liens créés sur %s' % (nb,nb_cibles)}