【发布时间】: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