如何在django rest框架中处理base64文件字段。我正在使用django额外的字段,但它不起作用。
serializers.py
from drf_extra_fields.fields import Base64FileField
class ProductSerializer(serializers.ModelSerializer):
file = Base64FileField()
class Meta:
model = Product
fields = (
"name",
"file"
)
class ProductApi(SerializerMixin, APIView):
serializer_class = ProductSerializer
def post(self, request):
serializer = ProductSerializer(data=request.data)
if serializer.is_valid():
return Response("Valid serializer", status=status.HTTP_201_CREATED)
return Response(
serializer.errors,
status=status.HTTP_400_BAD_REQUEST
)
但是当我尝试这个时,我收到了这个错误。
Exception Value: 'NotImplementedType' object is not callable
如何使用django rest framework
在数据库中保存base64文件答案 0 :(得分:1)
您必须提供此类的您自己的完整实现。您必须在
get_file_extension
方法中实施文件验证并设置ALLOWED_TYPES
列表。
您使用默认Base64FileField
,这就是您收到的原因:
Exception Value: 'NotImplementedType' object is not callable
在这种情况下,您需要扩展默认Base64FileField
并创建自定义字段以及验证方法get_file_extension
并将ALLOWED_TYPES
列表设置为属性。
直接来自文档的示例:
class PDFBase64File(Base64FileField):
ALLOWED_TYPES = ['pdf']
def get_file_extension(self, filename, decoded_file):
try:
PyPDF2.PdfFileReader(io.BytesIO(decoded_file))
except PyPDF2.utils.PdfReadError as e:
logger.warning(e)
else:
return 'pdf'
这是PDF
个文件的字段。然后在您的ProductSerializer
中,您可以使用新字段:file = PDFBase64FileField()
。