Python 使用序列化程序从URL保存图像

Python 使用序列化程序从URL保存图像,python,django,http,request,django-rest-framework,Python,Django,Http,Request,Django Rest Framework,我正在创建一个API,将图像保存在django模型中。通过API发送URL,django负责下载图像并将其保存在模型中 这是我的模型: class Picture(Media): image = models.ImageField(upload_to=picture_path, blank=True, null=True) entity = models.CharField(max_length=20, choices=ENTITIES,

我正在创建一个API,将图像保存在django模型中。通过API发送URL,django负责下载图像并将其保存在模型中

这是我的模型:

class Picture(Media):
    image = models.ImageField(upload_to=picture_path, blank=True, null=True)
    entity = models.CharField(max_length=20, choices=ENTITIES,
                          default=ENTITY_CLASIFICADO)
这是我的序列化程序:

class PictureSerializer(serializers.ModelSerializer):
    image = serializers.ImageField(max_length=None, use_url=True)

    class Meta:
        model = Picture
        fields = ("pk", "image", "entity",)
我从URL生成一个PIL对象。如何指定存储对象的序列化程序?我的观点

class PictureViewSet(generics.ListCreateAPIView):
    def create(self, request, *args, **kwargs):
        r = requests.get(request.data["url"])
        img_temp = NamedTemporaryFile(delete = True)
        img_temp.write(r.content)
现在,我正在保存空图像字段

serializer = self.get_serializer(data=request.data)
我想将PIL对象添加到request.data中,如下所示:

<QueryDict: {'url': ['https://s3.amazonaws.com/cat/encabezado.jpg'], 'image': ['MY PIL IMAGE'], 'entity': ['clasificado'], 'csrfmiddlewaretoken': ['JRMLIXkxqg6sF5YP19NLTvgFOmVWH9ARSmM']}>


谢谢

您可以直接在serialiser中执行此操作
所以基本上这是一个真实的工作示例,请注意,在
attrs
中设置图像时,我们需要将图像设置为相对路径
您还需要检查响应状态,但这由您决定)

另外,我将在这里介绍如何定义视图

class AudioListView(ListCreateAPIView):
    renderer_classes = [JSONRenderer]
    queryset = Audio.objects.select_related("artist")

    def get_serializer_class(self):
        if self.request.method == "GET":
            return AudioListSerializer
        if self.request.method == "POST":
            return AudioCreateSerializer

您可以直接在serialiser中执行此操作
所以基本上这是一个真实的工作示例,请注意,在
attrs
中设置图像时,我们需要将图像设置为相对路径
您还需要检查响应状态,但这由您决定)

另外,我将在这里介绍如何定义视图

class AudioListView(ListCreateAPIView):
    renderer_classes = [JSONRenderer]
    queryset = Audio.objects.select_related("artist")

    def get_serializer_class(self):
        if self.request.method == "GET":
            return AudioListSerializer
        if self.request.method == "POST":
            return AudioCreateSerializer