Почему возникает ошибка при добавлении файла "Object of type InMemoryUploadedFile is not JSON serializable"?

Моя цель - создать форму, в которой кроме charfields будет file field и все данные полей будут храниться в базе данных. Форма хранит данные charfield, но когда я добавляю новое поле filefield оно не работает и выдает следующую ошибку😥. Почему?

views.py:

def employeeListView(request):
    if request.method == 'POST':
        serializer = EmployeeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return redirect("/")

def InsertAndInfo(request):

    if request.method == 'POST':
        name = request.POST.get('name')
        email = request.POST.get('email')
        phone = request.POST.get('phone')
        file = request.FILES['filedf'] #if 'filedf' in request.FILES else None

        data = {
            'name':name,     
            'email':email,
            'phone':phone,
            'file':file
        }

        headers = {'Content-Type': 'application/json'}

        requests.post('http://127.0.0.1:8000/api/employees/',json=data,headers=headers)
        return redirect("/api/")


    employeeInfoApiLink = requests.get('http://127.0.0.1:8000/api/AllElmployeeInfo/').json()
    context = {
        "employeeInfo":employeeInfoApiLink
    }
    return render(request, 'InsertAndInfo.html',context)

models.py:

class Employee(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField(max_length=30)
    phone = models.CharField(max_length=30, null=True)
    file = models.FileField(upload_to="file/",null=True)

serializer.py:

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = "__all__"

form.html:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="text" class="form-control" name="name" id="name">
    <input type="email" name="email" class="form-control" id="email" aria-describedby="emailHelp">
    <input type="text" name="phone" class="form-control" id="phone">
    <input type="file" name="filedf" class="form-control" id="file">
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

Вы не можете отправить File как объект JSON. JSON не поддерживает эту функцию. Вы должны использовать form data. Вы можете проверить это Ответ

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