【问题标题】:ImageFile doesn`t work, don`t know what the problem is inImageFile 不工作,不知道问题出在哪里
【发布时间】:2021-08-21 22:15:10
【问题描述】:

我正在尝试上传图片,但它不起作用。不会返回错误,例如上传并且 self.validated_data['picture'] 或 serializer.self.validated_data['picture'] 打印不为空,但 JSON 中的 'picture' 保持为空 - 它不能。没有任何内容加载到媒体文件中,数据库中没有任何内容

观看次数

@api_view(['GET', 'POST'])
def api_pictures(request):
if request.method == 'GET':
    pictures = Picture.objects.all()
    serializer = PictureSerializer(pictures, many=True)
    return JsonResponse(serializer.data, safe=False)

if request.method == 'POST':
    serializer = PictureSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        print(serializer.validated_data['picture'])
        return Response(serializer.data, status=status.HTTP_201_CREATED)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

#模型

class Picture(models.Model):
    pic_name = models.CharField(max_length=255, blank=True)
    picture =models.ImageField(upload_to='media_site/',blank=True,
height_field='height', width_field='width')
    url = models.URLField(blank=True, null=True, max_length=500)
    height = models.IntegerField(blank=True, null=True)
    width = models.IntegerField(blank=True, null=True)

#网址

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include(router.urls)),
    path("api/images/", api_pictures),
    path("api/images/<int:pk>", detail_pictures),
]

#Serializers.py

class PictureSerializer(serializers.ModelSerializer):
    @staticmethod
    def name_parser(object_name):
        parser = re.search(r'[^/]*$', str(object_name))
        return parser[0]
def save(self):
    if 'picture' not in self.validated_data.keys():
        url = self.validated_data['url']
        result = urllib.request.urlopen(url=url)
        img = BytesIO(result.read())
        converted_img = InMemoryUploadedFile(img, None, self.name_parser(url),
                                             'image/jpeg', sys.getsizeof(img), None)
        print(converted_img)
        self.validated_data.update({'picture': converted_img})
    else:
        self.validated_data.update({'picture': self.validated_data['picture']})
    if 'pic_name' not in self.validated_data.keys():
        name = self.name_parser(self.validated_data['picture'])
        self.validated_data.update({'pic_name': name})

class Meta:
    model = Picture
    fields = ('id', 'pic_name', 'picture', 'url', 'width', 'height')

结果

但“图片”不能为空:((((

当我上传它时 self.validated_data['picture'] 不为空。 Django 没有返回错误。

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    我找到了解决方案,我应该在 PictureSerializer 类中的函数覆盖之后初始化 super.save()

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2012-02-18
      相关资源
      最近更新 更多