django - 如何在视图中使用 django rest 框架 CreateAPI 上传多个图像并在序列化程序中创建方法
问题描述
我有一个 post 序列化器和一个 postimage 序列化器来将多个图像上传到一个帖子。我有这个序列化程序,但我不知道如何以某种方式制作它,以便我可以上传多张图片,例如 5 张图片和一个帖子,就像我们如何使用表单集一样,因为现在我只能上传 1 张图片'images'
场地。
这些是序列化程序。请看看,让我知道我必须做出哪些改变......
谢谢
class PostImageSerializer(serializers.ModelSerializer):
class Meta:
model = PostImage
fields = ['id', 'images',]
class PostSerializer(TaggitSerializer, serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
post_date = serializers.ReadOnlyField()
postimage_set = PostImageSerializer(many=True)
likes = UserSerializer(many=True)
class Meta:
model = Post
fields = ['id','title', 'post_date', 'updated', 'user', 'image', 'postimage_set']
def create(self,validated_data):
user = self.context['request'].user
title = validated_data['title']
image = self.context['request'].FILES.get('image')
images = self.context['request'].FILES.get('images')
m1 = Post(user=user,title=title,image=image,)
m1.save()
m2 = PostImage(post=m1, images= images)
m2.save()
validated_data['images']=m2.images
validated_data['image']=m1.image
return validated_data
意见
class CreatePostAPIView(generics.CreateAPIView):
serializer_class = PostCreateSerializer
permission_classes = [IsAuthenticated]
def create(self, request, *args, **kwargs):
serializer = PostCreateSerializer(data=request.data, context={'request':request,})
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
解决方案
这解决了问题
def create(self, validated_date):
images = self.context['request'].FILES.getlist('images')
for image in list(images):
m2 = PostImage(post=m1, images= image)
m2.save()
推荐阅读
- javascript - 单击按钮后如何获取数组的下一个项目?
- python - 使用 ffn 时获取“column_names 必须与代码长度相同”
- android - VoIP 通话后 Android 通知无法以正确的音量播放
- python-3.x - Python:在空闲多处理池中处理键盘中断
- scala - 如何在我的 scala play 应用程序中为 heroku 设置 log4j2 配置文件?
- javascript - 使用 Asp.Net Core,如何将视图作为新的浏览器选项卡打开,然后稍后再关闭
- python - 数学模块和变量函数
- javascript - 使用 Vue.js 存储和使用用户数据的最佳实践
- react-native - 反应原生动画未运行
- reactjs - 从 Firebase 存储播放音频文件可以在本地工作,但不能在已部署的应用程序上工作