将多个图像上载到django rest framework/react
尝试做一个相当简单的项目,我可以上传多个图像到我的服务器,只有几个其他领域。我试着跟着,但没能在上面找到任何地方。我知道我需要将我的模型一分为二,因为“PostMage”有一个与Post相关的外键。我知道我需要修改序列化程序,以便允许图像文件数组。任何帮助都将不胜感激 models.py:将多个图像上载到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)
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只是您可以替换的选项的位置。此代码将向服务器上载多个图像。