diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 2f81b68a75..5c79d76339 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -840,3 +840,8 @@ def inheritors(cls): subcls.add(child) work.append(child) return subcls + + +def is_ajax(request): + """Check if the current request is an AJAX request.""" + return request.headers.get('x-requested-with') == 'XMLHttpRequest' diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index 9a6f4e95f2..5d4fe72381 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -33,7 +33,7 @@ from part.models import PartCategory from users.models import RuleSet, check_user_role from .forms import EditUserForm, SetPasswordForm -from .helpers import remove_non_printable_characters, strip_html_tags +from .helpers import is_ajax, remove_non_printable_characters, strip_html_tags def auth_request(request): @@ -258,7 +258,7 @@ class AjaxMixin(InvenTreeRoleMixin): if not data: data = {} - if not request.is_ajax(): + if not is_ajax(request): return HttpResponseRedirect('/') if context is None: diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index f5664f4533..034b381a49 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -22,8 +22,8 @@ from InvenTree.api import (APIDownloadMixin, AttachmentMixin, from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, InvenTreeSearchFilter) -from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull, - str2bool, str2int) +from InvenTree.helpers import (DownloadFile, increment_serial_number, is_ajax, + isNull, str2bool, str2int) from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI, ListAPI, ListCreateAPI, RetrieveAPI, RetrieveUpdateAPI, RetrieveUpdateDestroyAPI, @@ -1069,7 +1069,7 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): """ if page is not None: return self.get_paginated_response(data) - elif request.is_ajax(): + elif is_ajax(request): return JsonResponse(data, safe=False) return Response(data) @@ -1740,7 +1740,7 @@ class BomList(BomMixin, ListCreateDestroyAPIView): """ if page is not None: return self.get_paginated_response(data) - elif request.is_ajax(): + elif is_ajax(request): return JsonResponse(data, safe=False) return Response(data) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index a6b5bf6f38..ca19bae94a 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -27,8 +27,8 @@ from InvenTree.api import (APIDownloadMixin, AttachmentMixin, ListCreateDestroyAPIView, MetadataView) from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter) -from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull, - str2bool, str2int) +from InvenTree.helpers import (DownloadFile, extract_serial_numbers, is_ajax, + isNull, str2bool, str2int) from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI, ListAPI, ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI) @@ -963,7 +963,7 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): if page is not None: return self.get_paginated_response(data) - elif request.is_ajax(): + elif is_ajax(request): return JsonResponse(data, safe=False) return Response(data) @@ -1346,7 +1346,7 @@ class StockTrackingList(ListAPI): if page is not None: return self.get_paginated_response(data) - if request.is_ajax(): + if is_ajax(request): return JsonResponse(data, safe=False) return Response(data)