DRF-在发布请求期间进行MultiPartParse

时间:2019-04-07 20:11:51

标签: python django django-rest-framework

我对DRF并不陌生,我正在从事一个个人项目,该项目由一个API(DRF)和一个前台(React)组成。在正面,将有一种表单,允许输入一些字段(作者,年份...),并与之一起发送一堆图像。

我有两个大致像这样的 model

class Image(models.Model):
    image = models.ImageField(upload_to='documents/%Y/%m/%d')
    ...

class Data(models.Model):
    title = models.CharField(max_length=256)
    ...
    images = models.ManyToManyField(Image)

序列化程序已经创建,如果我先上传图像,然后(例如,在Django门户上)上传具有图像ID的数据,则一切正常,但是我想仅发送一个请求带有数据和文件的前端,并处理服务器端的所有操作(而不是一个接一个地发送图像,然后发出第二个请求)

因此,在我的 views.py 上,我创建了一种处理POST和GET数据的方法,在POST部分,我的意图是创建以下内容

 elif request.method == 'POST':
    data = MultiPartParser().parse(request.data)

    images = []
    for image in data.files:
        new_Image = Image(image, ...)
        new_Image.save()
        images.append(new_Image)

    data = Data(data.author, ...)
    data.images.add(images)
    serializer = DataSerializer(data, many=True)

    if serializer.is_valid():
        instance = serializer.save()
        return JsonResponse(serializer.data, status=201)
    return JsonResponse(serializer.errors, status=400)

我有两个问题
首先,multipartparser对我不起作用,它始终使我在Keyerror'request'时出现错误
其次,它以一种有趣的方式起作用, MultiPartParser()。parse(...)被调用了两次,首先是 _parser (实际上我不知道它在哪里)来自),然后来自我的方法。第一个没有引发任何错误,并且具有请求中的所有正确信息(数据和文件),第二个是我发出的信息,它是给我该错误的信息。

我在做什么错?我没有使用类viewsets.ModelViewSet的通常格式,因为我想更深入地学习(例如,自己对GET Data进行分页),我应该做些不同的事情吗?有解决这个问题的更好方法吗?

谢谢!

0 个答案:

没有答案