diff -r 854a027c80ff -r b9edc1c1538a server/python/django2/renkanmanager/api/views.py --- a/server/python/django2/renkanmanager/api/views.py Wed Apr 27 16:36:30 2016 +0200 +++ b/server/python/django2/renkanmanager/api/views.py Tue May 03 14:32:28 2016 +0200 @@ -9,6 +9,7 @@ import logging import uuid +from django.db import transaction from django.core.urlresolvers import reverse from django.http import Http404 from django.http.response import HttpResponse, HttpResponseBadRequest @@ -34,7 +35,7 @@ if workspace_guid == '': renkans = self.queryset.all() else: - renkans = self.queryset.filter(workspace_guid=workspace_guid) + renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid) serializer = RenkanSerializer(renkans, many=True) return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') @@ -47,7 +48,7 @@ source_renkan=Renkan.objects.get(renkan_guid=source_renkan_guid) except Renkan.DoesNotExist: return Response({'detail': 'Source renkan '+source_renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND) - source_revision_guid = source_renkan.current_revision_guid + source_revision_guid = source_renkan.current_revision.revision_guid if source_revision_guid is not None: try: source_revision=Revision.objects.get(revision_guid=source_revision_guid) @@ -62,10 +63,9 @@ except Workspace.DoesNotExist: return Response({'detail': 'Workspace '+workspace_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND) create_data["workspace_id"] = workspace_guid - serializer = RenkanSerializer(data=create_data) if serializer.is_valid(): - serializer.save(creator=request.user) + serializer.save(creator=request.user) return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json') return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -81,7 +81,6 @@ return self.queryset.get(renkan_guid=renkan_guid) def dispatch(self, *args, **kwargs): - logger.debug("TEST 1 21 12 TEST") return super(RenkanDetail, self).dispatch(*args, **kwargs) def get(self, request, renkan_guid, format=None): @@ -89,10 +88,7 @@ renkan = self.get_object(renkan_guid=renkan_guid) except Renkan.DoesNotExist: return Response({'detail': 'Renkan project %r does not exist'.format(renkan_guid)}, status=status.HTTP_404_NOT_FOUND) - logger.debug("RENKAN GET %r : CHECKING OBJECT PERMISSION", renkan_guid) - logger.debug("RENKAN GET: permission? %r", request.user.has_perm("view_renkan", renkan)) self.check_object_permissions(request, renkan) - logger.debug("RENKAN GET: PERMISSION GRANTED") serializer = RenkanSerializer(renkan) if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()): return Response(json.loads(serializer.data["content"]), status=status.HTTP_200_OK, content_type='application/json') @@ -119,19 +115,13 @@ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + @transaction.atomic def delete(self, request, renkan_guid, format=None): try: to_delete_renkan = self.get_object(renkan_guid=renkan_guid) except Renkan.DoesNotExist: return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND) self.check_object_permissions(request, to_delete_renkan) - renkan_revisions = Revision.objects.filter(parent_renkan_guid = to_delete_renkan.renkan_guid) - for child_revision in renkan_revisions: - # Deleting reference to revision in renkans copied from this revision - for related_renkan in self.queryset.filter(source_revision_guid=child_revision.revision_guid): - related_renkan.source_revision_guid = '' - related_renkan.save() - child_revision.delete() to_delete_renkan.delete() return Response(status=status.HTTP_204_NO_CONTENT) @@ -204,7 +194,7 @@ def get_queryset(self, renkan_guid=""): if renkan_guid: - return Revision.objects.filter(parent_renkan_guid=renkan_guid) + return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid) else: return Revision.objects @@ -224,7 +214,7 @@ def get_queryset(self, renkan_guid=""): if renkan_guid: - return Revision.objects.filter(parent_renkan_guid=renkan_guid) + return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid) else: return Revision.objects @@ -253,10 +243,5 @@ return Response({'detail': 'You cannot delete the last remaining revision of a renkan from the Revision API. Try deleting the parent Renkan with the Renkan API'}, status=status.HTTP_400_BAD_REQUEST) if revision.is_current_revision: return Response({'detail': 'You cannot delete the current revision of a renkan from the Revision API.'}, status=status.HTTP_400_BAD_REQUEST) - - # Deleting reference to revision in renkans copied from this revision - for related_renkan in Renkan.objects.filter(source_revision_guid=revision_guid): - related_renkan.source_revision_guid = '' - related_renkan.save() revision.delete() return Response(status=status.HTTP_204_NO_CONTENT)