我对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进行分页),我应该做些不同的事情吗?有解决这个问题的更好方法吗?
谢谢!