def propose(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            raise PermissionDenied(_('You need to log in to propose changes.'))

        changeset = self.get_object()
        with changeset.lock_to_edit(request) as changeset:
            if not changeset.title or not changeset.description:
                raise PermissionDenied(_('You need to add a title an a description to propose this change set.'))

            if not changeset.can_propose(request):
                raise PermissionDenied(_('You cannot propose this change set.'))

            changeset.propose(request.user)
            return Response({'success': True})