Обычно, когда вы загружаете файл, вы используете формат запроса multipart
, и представление преобразует изображение в объект InMemoryUploadedFile
, и оно передается в ваш сериализатор
Итак, чтобы исправить ваши тесты, я бы порекомендовал попробовать:
from PIL import Image
from tempfile import NamedTemporaryFile
from django.conf.files.uploadedfile import InMemoryUploadedFile
...
def test_image(self):
image = Image.new("RGB", (100, 100))
with NamedTemporaryFile(suffix=".png", mode="w+b") as tmp_file:
image.save(tmp_file, format="png")
tmp_file.seek(0)
byio = BytesIO(temp_file.read())
inm_file = InMemoryUploadedFile(
file=byio,
field_name="avatar",
name="testImage.png",
content_type="image/png",
size=byio.getbuffer().nbytes,
charset=None,
)
self.data['avatar'] = inm_file
serializer = MySerializer(data=self.data)
if not serializer.is_valid():
import pprint
pprint.pprint(serializer.errors)
self.assertEqual(serializer.is_valid(), True)
Что это делает:
- Создание изображения в памяти с помощью PIL.Image
- Создать NamedTeoraryFile для хранения данных изображения
- Возьмите NamedTeoraryFile и прочитайте в InMemoryUploadedFile
- Передать этот файл InMemoryUploadedFile в сериализатор