Почему возникает ошибка при добавлении файла "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
. Вы можете проверить это Ответ