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.is_valid(raise_exception=True)
build = serializer.save()
build.issued_by = request.user
build.save()
serializer.save(issued_by=request.user)
headers = self.get_success_headers(serializer.data)
return Response(
+2 -6
View File
@@ -479,9 +479,7 @@ class NotesImageList(ListCreateAPI):
def perform_create(self, serializer):
"""Create (upload) a new notes image."""
image = serializer.save()
image.user = self.request.user
image.save()
serializer.save(user=self.request.user)
class ProjectCodeList(DataExportViewMixin, ListCreateAPI):
@@ -810,9 +808,7 @@ class AttachmentList(AttachmentMixin, BulkDeleteMixin, ListCreateAPI):
def perform_create(self, serializer):
"""Save the user information when a file is uploaded."""
attachment = serializer.save()
attachment.upload_user = self.request.user
attachment.save()
serializer.save(upload_user=self.request.user)
def validate_delete(self, queryset, request) -> None:
"""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.is_valid(raise_exception=True)
item = serializer.save()
item.created_by = request.user
item.save()
serializer.save(created_by=request.user)
headers = self.get_success_headers(serializer.data)
return Response(
+1 -30
View File
@@ -1512,10 +1512,7 @@ class StockItemTestResultList(
Also, check if an attachment was uploaded alongside the test result,
and save it to the database if it were.
"""
# Capture the user information
test_result = serializer.save()
test_result.user = self.request.user
test_result.save()
serializer.save(user=self.request.user)
class StockTrackingDetail(RetrieveAPI):
@@ -1664,32 +1661,6 @@ class StockTrackingList(
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
ordering = '-date'