Как сделать тип FILE json сериализуемым
Я пытаюсь отправить json ответ в django, но получаю эту ошибку
TypeError: Объект типа File не является JSON сериализуемым
Ошибка возникает потому, что я использую тип <class 'django.core.files.base.File'> в json-ответе. Как я могу преобразовать его в сериализуемый формат json?
Код:
user_id = User.objects.get(id=token_data['user_id'])
all_posts = publicPost.objects.filter(user_id=user_id)
post_ids = []
for post in all_posts:
post_ids.append(post.id)
images = {}
for id in post_ids:
img_obj = PostImage.objects.filter(post_id=id)
imgs = [img_obj[0].image.file]
try:
x = img_obj[0].other_image1.file
imgs.append(x)
except ValueError:
pass
try:
x = img_obj[0].other_image2.file
imgs.append(x)
except ValueError:
pass
try:
x = img_obj[0].other_image2.file
print('type', type(x))
imgs.append(x)
except ValueError:
pass
images[id] = imgs
return JsonResponse({'posts': post_ids, 'images': images})
если вам действительно нужно отправить файл в ответе, вы можете попробовать сначала преобразовать его в байты.
images = [bytes(img).decode('utf8') for img in images]
Сериализуйте url, а не изображение:
img_obj[0].image.url
вместо
img_obj[0].image.file