如果文档上传失败,如何不保存到数据库



当用户上传文档并单击提交时,该文件将存储在文件夹中,并创建一个数据库条目以及一堆其他详细信息。我想要的是避免保存,如果文件没有被上传到特定的位置。

serializer.py

class DocumentSerializer(serializers.ModelSerializer):
class Meta:
model = Request
fields = ['file', 'doc_type']
def create(self, validated_data):
msg = self.__construct_message_body()
validated_data['type'] = Request.request_types[-1][0]
validated_data['input_message'] = msg
instance = ParseRequest.objects.create(**validated_data)
msg['request_id'] = instance.id
instance.input_message = msg
instance.save()
return instance

views.py

class DocumentView(CreateAPIView, ResponseViewMixin):
parser_classes = (MultiPartParser, FileUploadParser,)
serializer_class = DocumentSerializer
def create(self, request, *args, **kwargs):
try:
data = request.data
serializer = self.get_serializer(
data=data, context={'request': request})
serializer.is_valid()
serializer.save()
except Exception as e:
logger.error(e)
return self.error_response(message=ERROR_RESPONSE['UPLOAD_DOCUMENT'])
return self.success_response(message=SUCCESS_RESPONSE['UPLOAD_DOCUMENT'])

可以使用原子事务。你可以这样修改你的代码:

views.py

from django.db import transaction
class DocumentView(CreateAPIView, ResponseViewMixin):
parser_classes = (MultiPartParser, FileUploadParser,)
serializer_class = DocumentSerializer
def create(self, request, *args, **kwargs):
try:
with transaction.atomic():
data = request.data
serializer = self.get_serializer(
data=data, context={'request': request})
serializer.is_valid()
serializer.save()
return self.success_response(message=SUCCESS_RESPONSE['UPLOAD_DOCUMENT'])
except Exception as e:
logger.error(e)
return self.error_response(message=ERROR_RESPONSE['UPLOAD_DOCUMENT'])

如果with块内部发生错误,它将不会被保存到数据库中。

最新更新