Django Rest Framework serializer创建具有多个图像的对象 [英] Django Rest Framework serializer create object with multiple images

查看:523
本文介绍了Django Rest Framework serializer创建具有多个图像的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个应用程序处理一些邮件与图像。



我不知道如何序列化程序可以帮助我创建一个邮件对象和所有相关的图像同时(因为邮件和图像属于不同的模型,如下所述)



这是我的相关代码,抱歉,我从实际模型中删除了一些字段来帮助关注这个问题的情况。



models.py

 类邮件(models.Model):
id = models.AutoField(primary_key = True)
title = models.CharField(max_length = 255)
content = models.CharField(max_length = 255)

class MailImage(models.Model):
image = models.ImageField(upload_to = get_file_path,blank = True,null = True)
mail = models.ForeignKey(Mail,related_name = '图像')

serializers.py

  class MailImageSerializer(serializers.ModelSerializer):
class Meta:
model = MailImage

class MailSerializer(serializers.ModelSerializer):
#images = ??? //可以帮忙吗?
class Meta:
model = Mail

APIView

 类SentMailView(APIView):
permission_classes =()
parser_classes =(FileUploadParser,)
def post ,request,format = None)
data = {
'images':request.data ['images'],
'title':request.data ['title'],
'content':request.data ['content'],
}
serializer = MailSerializer(data = data)
如果serializer.is_valid():
serializer。 save()
return响应({'success':True})
else:
返回响应({'success':False})

cURL测试

  curl -X POST -H Content-Type:multipart / form-data-Ftitle = test-Fcontent = test-Fimages=@Testing.jpghttp://127.0.0.1:8000/api/sent-mail 

Als这个cURL命令只发送一张照片,如果有人可以修改它,可以在一个cURL命令中发送一个邮件的多个图像。



感谢您的帮助。 / p>

解决方案

  class FileUploadView(views.APIView):
parser_classes =(FileUploadParser, )

def put(self,request,filename,format = None):
file_obj = request.data ['file']
#...
#做一些东西与上传的文件
#...
返回响应(状态= 204)

资料来源:
http:// www。 django-rest-framework.org/api-guide/parsers/#fileuploadparser


Suppose I have an application to deal with some mail messages with images.

I am not sure how serializer can help me to create an mail object and all related images at the same time (because mail and images belong to different model as mentioned below)

Here are my related codes, sorry that I removed some fields from my actual model to help focus on this question's situation.

models.py

class Mail(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)
    content = models.CharField(max_length=255)

class MailImage(models.Model):
    image = models.ImageField(upload_to=get_file_path, blank=True, null=True)
    mail = models.ForeignKey(Mail, related_name='images')

serializers.py

class MailImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MailImage

class MailSerializer(serializers.ModelSerializer):
    # images = ??? //Can any one help on this?
    class Meta:
        model = Mail

APIView

class SentMailView(APIView):
    permission_classes = ()
    parser_classes = (FileUploadParser,)
    def post(self, request, format=None):
        data = {
            'images': request.data['images'],
            'title': request.data['title'],
            'content': request.data['content'],
        }
        serializer = MailSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response({'success': True})
        else:
            return Response({'success': False})

cURL Testing

curl -X POST -H "Content-Type:multipart/form-data" -F "title=test" -F "content=test" -F "images=@Testing.jpg" http://127.0.0.1:8000/api/sent-mail

Also this cURL command only send one picture, it would be appreciate if anyone can revise it to send multiple images for an mail in ONE cURL command.

Thanks for helping.

解决方案

class FileUploadView(views.APIView):
    parser_classes = (FileUploadParser,)

    def put(self, request, filename, format=None):
        file_obj = request.data['file']
        # ...
        # do some stuff with uploaded file
        # ...
        return Response(status=204)

Source: http://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser

这篇关于Django Rest Framework serializer创建具有多个图像的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆