Почему мое изображение Pillow не считается файлом, когда я пытаюсь сохранить его в поле изображения в django?

Я пишу приложение для создания/заполнения форм, и я дошел до того момента, когда я беру данные с холста с фронт-энда и заполненные поля ввода текста и рисую их на картинке формы с помощью библиотеки pillow. Проблема в том, что когда я пытаюсь сохранить данные для формы, я получаю эту ошибку из "serializer.error" из django-rest-framework: "'FilledForm': [ErrorDetail(string='Отправленные данные не были файлом. Проверьте тип кодировки в форме.', code='invalid')]}"

Вот представление Api:

@api_view(['POST'])
def postForm(request):
   dataDict = request.data
   FieldCoords = {}
   # Define Formtype

   selectedForm = dataDict["SelectedForm"]
   del dataDict["SelectedForm"]

   # Get Datalist for form creation
   datalist = list(FormData.objects.filter(FormType=selectedForm).values())        

   #Set Signature Images on Form and Fill form with inputs

   for field in datalist:
    #Get Field Positions of Model
       if field["FieldType"] == "SignatureField":
           FieldCoords[field["FieldName"]] = (field["StartX"],field["StartY"])
       elif field["FieldType"] == "TextField":
           FieldCoords[field["FieldName"]] = (field["StartX"],field["StartY"],abs(field["height"]))
       elif field["FieldType"] == "DateField":
           FieldCoords[field["FieldName"]] = (field["StartX"],field["StartY"])

#print(FieldCoords)

#Place Signature Fields On FormImage

   sigFields = json.loads(dataDict["Signatures"])
   FormImage = Image.open(f"{MEDIA_ROOT}/{selectedForm}")
   del dataDict["Signatures"]
   for field in sigFields:
       datauri = sigFields[field]
       uri = datauri.split("base64,")
       sNameselect = field.split("  -  ")

       bytes = base64.b64decode(uri[1])  
       img = Image.open(io.BytesIO(bytes))

       for keyCoordSet in FieldCoords:
           print(keyCoordSet)
           print("Name" + sNameselect[0])
           if sNameselect[0] == keyCoordSet:
               print("Im here")
               FormImage.paste(img, FieldCoords[keyCoordSet], mask=img)

#Place Text Fields On FormImage
   d1 = ImageDraw.Draw(FormImage)
   for field in dataDict:
       for keyCoordSet in FieldCoords:
           if field == keyCoordSet:
               myFont = ImageFont.truetype("LiberationMono-Regular.ttf",size=FieldCoords[keyCoordSet][2] - 10)
               d1.text((FieldCoords[keyCoordSet][0]+5,FieldCoords[keyCoordSet][1]+5), dataDict[field], fill =(255, 255, 255),font=myFont)
   time = str(timezone.now()).split(" ")


   image_bytes = io.BytesIO(FormImage.tobytes())
   imageFile = ContentFile(image_bytes.getvalue())
   print(imageFile.read())
   data = {                                           # Final data structure
       "FormType": selectedForm,
       "DateCreated": time[0],
       "Data": json.dumps(dataDict, indent = 4),
       "FilledForm": (str(selectedForm),imageFile)

   }

   serializer = FilledFormdataSerializer(data=data)

   print(type(imageFile))
   if serializer.is_valid():
       print("Im Valid")
       #serializer.save()
   else:
       print(serializer.errors)

   return Response("Returned Data")

Вот модель

class FilledForm(models.Model):
    FormType = models.CharField(max_length=100)
    DateCreated = models.DateField(default=timezone.now())
    Data = models.JSONField()
    FilledForm = models.ImageField()

Вот сериализатор

class FilledFormdataSerializer(serializers.ModelSerializer):
    class Meta:
        model = FilledForm
        fields = ["FormType", "DateCreated", "Data", "FilledForm"]

    def create(self, validated_data):
        print(validated_data)
        return FilledForm.objects.create(**validated_data)

Вот часть Кодекса, где идет речь

#Place Text Fields On FormImage
d1 = ImageDraw.Draw(FormImage)
for field in dataDict:
    for keyCoordSet in FieldCoords:
        if field == keyCoordSet:
            myFont = ImageFont.truetype("LiberationMono-Regular.ttf",size=FieldCoords[keyCoordSet][2] - 10)
            d1.text((FieldCoords[keyCoordSet][0]+5,FieldCoords[keyCoordSet][1]+5), dataDict[field], fill =(255, 255, 255),font=myFont)
time = str(timezone.now()).split(" ")


image_bytes = io.BytesIO(FormImage.tobytes())
imageFile = ContentFile(image_bytes.getvalue())
print(imageFile.read())
data = {                                           # Final data structure
    "FormType": selectedForm,
    "DateCreated": time[0],
    "Data": json.dumps(dataDict, indent = 4),
    "FilledForm": (str(selectedForm),FormImage)

}

serializer = FilledFormdataSerializer(data=data)

print(type(imageFile))
if serializer.is_valid():
    print("Im Valid")
    #serializer.save()
else:
    print(serializer.errors)

Вот все импортированные модули

from rest_framework.response import Response
from rest_framework.decorators import api_view
from api.serializer import DataSerializer, FilledFormdataSerializer
from django.core.files import File
from django.utils import timezone
from backend.models import FormData
from django.core.files.base import ContentFile
import json
from PIL import Image, ImageDraw, ImageFont
import base64
import io
from FormApp.settings import BASE_DIR, MEDIA_ROOT

По какой-то причине он говорит, что не читает его как файл, хотя я конвертирую его в байты и сохраняю в объект ContentFile(). Могу ли я получить совет, почему он не сохраняется в поле изображения?

Вернуться на верх