如何在Django Rest Framework中使用MultiPartParser

10

我需要上传一个文件和与之相关的一些JSON数据,但我不知道如何保存这些不同部分,特别是JSON部分,也就是说我能够保存图像但无法保存JSON。

看到需要使用MultiPartParser,但我无法弄清楚如何正确地将其整合到我的序列化器类中。

这是我的服务器收到的多部分请求:

<QueryDict: {'geo': ['{"point" : { "type:" : "Point", "coordinates" : [11.51350462236356, -22.70903491973877]}}'], 'picture': [<TemporaryUploadedFile: photo3.jpg (image/*)>]}>

这是景象:

class UserUploadedPicture(APIView):

    def post(self, request, format=None):
        print(request.data)
        print("\n\n\n")
        serializer = PictureSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)

这是序列化器:

class PictureSerializer(GeoFeatureModelSerializer):
    class Meta:
        model = Pictures
        geo_field = "point"
        fields = ('picture', 'processed', 'flagged', 'point')

这是模型:

class Pictures(models.Model):
    objects = models.GeoManager()
    picture = models.ImageField(null=True, default=None, blank=True)
    processed = models.BooleanField(default=False)
    flagged = models.BooleanField(default=False)
    point = models.PointField(null=True, default=None, blank=True)

有人可以告诉我如何正确地序列化point字段吗?也许我需要更改JSON格式?也许我需要更改序列化器?

1个回答

5
关于集成 MultiPartParser,需在 View 中完成,因为它负责接收请求并处理请求,而不是 Serializer。 您正在使用基于类的视图,定义解析器可通过 parser_classes 属性进行,如您提供的官方文档链接中所述。
因此,您的 View 如下:
class UserUploadedPicture(APIView):
    parser_classes = (MultiPartParser, )

    def post(self, request, format=None):
        print(request.data)
        print("\n\n\n")
        serializer = PictureSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)

关于您的PointFieldSerializer,请查看此SO答案


你好 @Anas,调用包含图片的post api时是否真的需要使用parser_class?如果是,我们应该使用MultiPart还是FormDataParser? - Reactoo
你好 @Anas,https://stackoverflow.com/questions/67622998/how-to-append-the-fields-inside-an-array-to-a-formdata-in-react 这个问题能否请你帮我解决一下? - Reactoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接