将多个图像上载到django rest framework/react

将多个图像上载到django rest framework/react,django,django-rest-framework,Django,Django Rest Framework,尝试做一个相当简单的项目,我可以上传多个图像到我的服务器,只有几个其他领域。我试着跟着,但没能在上面找到任何地方。我知道我需要将我的模型一分为二,因为“PostMage”有一个与Post相关的外键。我知道我需要修改序列化程序,以便允许图像文件数组。任何帮助都将不胜感激 models.py: from django.db import models class Post(models.Model): title = models.CharField(max_length = 100)

尝试做一个相当简单的项目,我可以上传多个图像到我的服务器,只有几个其他领域。我试着跟着,但没能在上面找到任何地方。我知道我需要将我的模型一分为二,因为“PostMage”有一个与Post相关的外键。我知道我需要修改序列化程序,以便允许图像文件数组。任何帮助都将不胜感激

models.py:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = models.TextField()
    image = models.ImageField(upload_to='post_images')

    def __str__(self):
        return self.title
serializers.py:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
views.py:

from django.shortcuts import render

# Create your views here.

from .serializers import PostSerializer
from .models import Post
from rest_framework.views import APIView
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.response import Response
from rest_framework import status
# Create your views here.

class PostView(APIView):
    parser_classes = (MultiPartParser, FormParser)

    def get(self, request, *args, **kwargs):
        posts = Post.objects.all()
        serializer = PostSerializer(posts, many=True)
        return Response(serializer.data)

    def post(self, request, *args, **kwargs):
        posts_serializer = PostSerializer(data=request.data)
        if posts_serializer.is_valid():
            posts_serializer.save()
            return Response(posts_serializer.data, status=status.HTTP_201_CREATED)
        else:
            print('error', posts_serializer.errors)
            return Response(posts_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

您需要与
Post
模型建立
ForeignKey
关系。您可以这样做:

models.py

from django.db import models

class Media(models.Model):
    detail = models.CharField(max_length=200, default='', null=True, blank=True)
    user = models.ForeignKey(to=MyUser, related_name='user_media')
    type = models.CharField(max_length=20, choices=Constant.model.MEDIA_TYPE, default='other')
    media = models.FileField(max_length=10000, upload_to=upload_media_file, blank=True, null=True)

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = models.TextField()
    media = models.ForeignKey(Media, related_name='posts')

    def __str__(self):
        return self.title
序列化程序.py

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    media = serializers.ListField(write_only=True,
                                  child=serializers.FileField(max_length=10000000,
                                                              allow_empty_file=True,
                                                              use_url=False)
    class Meta:
        model = Post
        fields = '__all__' 

    def is_valid(self, raise_exception=False):
            if len(data.getlist('media')) > 5:
                 raise 'some error'

您在实施时面临什么困难?您需要以
格式/多部分
内容类型或支持的类似
格式发送数据format@ArakkalAbu我将它发送到“'content-type':'multipart/formdata'”。当从上面的堆栈溢出实现解决方案时,我没有收到任何提交到服务器的图像,也不能选择多个图像。您有任何错误吗?@ArakkalAbu非常适合上面的一个图像,一旦从另一个帖子实现解决方案,我在发布到服务器时会收到500个错误,django Thought中没有错误也只允许我选择一个文件。这不起作用。我觉得这是遗漏了什么。我在媒体课上遗漏了用户和细节。但你从哪里得到“常数”作为选择呢?最后,我要寻找的是将多个图像上传到服务器,然后在我通过api请求时拥有一个文件位置数组。Contant只是您可以替换的选项的位置。此代码将向服务器上载多个图像。