2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-07-04 06:00:38 +00:00

[bug] Fix double save (#12194)

* Prevent double-save when creating an order

* Prevent double-save for BuildOrder

* More fixes

* Additional unit tests

* Revert code, remove create method against StockTrackingList

* Fix mixins
This commit is contained in:
Oliver
2026-06-18 20:18:46 +10:00
committed by GitHub
parent 2ca86808bb
commit 5b97acb79f
4 changed files with 5 additions and 42 deletions
+1 -3
View File
@@ -395,9 +395,7 @@ class BuildList(
serializer = self.get_serializer(data=self.clean_data(request.data)) serializer = self.get_serializer(data=self.clean_data(request.data))
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
build = serializer.save() serializer.save(issued_by=request.user)
build.issued_by = request.user
build.save()
headers = self.get_success_headers(serializer.data) headers = self.get_success_headers(serializer.data)
return Response( return Response(
+2 -6
View File
@@ -479,9 +479,7 @@ class NotesImageList(ListCreateAPI):
def perform_create(self, serializer): def perform_create(self, serializer):
"""Create (upload) a new notes image.""" """Create (upload) a new notes image."""
image = serializer.save() serializer.save(user=self.request.user)
image.user = self.request.user
image.save()
class ProjectCodeList(DataExportViewMixin, ListCreateAPI): class ProjectCodeList(DataExportViewMixin, ListCreateAPI):
@@ -810,9 +808,7 @@ class AttachmentList(AttachmentMixin, BulkDeleteMixin, ListCreateAPI):
def perform_create(self, serializer): def perform_create(self, serializer):
"""Save the user information when a file is uploaded.""" """Save the user information when a file is uploaded."""
attachment = serializer.save() serializer.save(upload_user=self.request.user)
attachment.upload_user = self.request.user
attachment.save()
def validate_delete(self, queryset, request) -> None: def validate_delete(self, queryset, request) -> None:
"""Ensure that the user has correct permissions for a bulk-delete. """Ensure that the user has correct permissions for a bulk-delete.
+1 -3
View File
@@ -103,9 +103,7 @@ class OrderCreateMixin:
serializer = self.get_serializer(data=self.clean_data(request.data)) serializer = self.get_serializer(data=self.clean_data(request.data))
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
item = serializer.save() serializer.save(created_by=request.user)
item.created_by = request.user
item.save()
headers = self.get_success_headers(serializer.data) headers = self.get_success_headers(serializer.data)
return Response( return Response(
+1 -30
View File
@@ -1512,10 +1512,7 @@ class StockItemTestResultList(
Also, check if an attachment was uploaded alongside the test result, Also, check if an attachment was uploaded alongside the test result,
and save it to the database if it were. and save it to the database if it were.
""" """
# Capture the user information serializer.save(user=self.request.user)
test_result = serializer.save()
test_result.user = self.request.user
test_result.save()
class StockTrackingDetail(RetrieveAPI): class StockTrackingDetail(RetrieveAPI):
@@ -1664,32 +1661,6 @@ class StockTrackingList(
return Response(data) return Response(data)
def create(self, request, *args, **kwargs):
"""Create a new StockItemTracking object.
Here we override the default 'create' implementation,
to save the user information associated with the request object.
"""
# Clean up input data
data = self.clean_data(request.data)
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
# Record the user who created this Part object
item = serializer.save()
item.user = request.user
item.system = False
# quantity field cannot be explicitly adjusted here
item.quantity = item.item.quantity
item.save()
headers = self.get_success_headers(serializer.data)
return Response(
serializer.data, status=status.HTTP_201_CREATED, headers=headers
)
filter_backends = SEARCH_ORDER_FILTER filter_backends = SEARCH_ORDER_FILTER
ordering = '-date' ordering = '-date'