我有models
、serializer
和带有FileField
的视图集
class Drawing(SafeDeleteModel):
drawing = f.FileField(upload_to='uploads/')
class DrawingSerializer(ModelSerializer):
drawing = serializers.FileField()
class DrawingViewSet(viewsets.ModelViewSet):
queryset = m.Drawing.objects.all()
serializer_class = s.DrawingSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
print("serializer request:",request.data['drawing']) # this is myfile.pdf
self.perform_create(serializer)
print("serializer seliarizer",serializer.data['drawing'])
# myfile_ccA3TjY.pdf
try:
doc = fitz.open(file_path) # open to check if it is correct pdf
except;
raise Exception("file is not valid pdf")
字符串
上传文件时,request.data['drawing']
为myfile.pdf
,serializer.data['drawing']
为真实的myfile_ccA3TjY.pdf
。(当存在同名文件时)
因此,要使用fitz
打开文件,我需要知道真实的名称myfile_ccA3TjY.pdf
。
我必须执行self.perform_create
才能知道真实的的文件名,它会创建行。但是,我想取消插入到数据库时,文件不是有效的pdf。
使用此代码,即使文件不正确,也会执行数据库插入。
有没有办法不调用self.perform_create
就打开文件?
1条答案
按热度按时间qyswt5oh1#
根据文档,可以从内存中创建文件对象。你可以这样做:
字符串