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:
@@ -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(
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
Reference in New Issue
Block a user