Recibo el error: [ErrorDetail(string='The submitted data was not a file. Check the encoding type on the form.', code='invalid')]
, para enviar una imagen/archivo.
Agregué el tipo de cifrado para el formulario 'multipart/form-data' también en la llamada de Axios, pero sigo teniendo el mismo error.
Tengo un modelo como este:
class MyModel(models.Model): img = models.ImageField(upload_to='media',blank=False)
En vistas.py:
class MyModelView(viewset.ModelViewSet): serializer_class = serializer.MyModelSerializer def post(self,request): data = serializer.MyModelSerializer(data=request.data) print(data.is_valid()) # this is false, means there is an error print(data.errors) #This one will display the error shown in the title of this question if data.is_valid(): img = data.data['img'] return Response('Success') return Response('Fail')
En serializador.py:
class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = '__all__'
En el lado frontal (Reaccionar):
function ImgComp(){ let [img,setImg] = useState({'image':''} let {image} = img function handleChange(e){ setImg( { ...img,[e.target.name]:e.target.value } ) } function submitForm(e){ e.preventDefault() axios.post('127.0.0.1:8000/mymodelurl/',img,{withCredentials:true,headers:{'Content-Type':'multipart/form-data'}}) return( <div> <form method='post' encType='multipart/form-data' onSubmit = {(e)=>submitForm(e)}> <input type='file' value={image} name='img' onChange={(e)=>handleChange(e)}/> </form> </div> } }
Si depuro el img obtengo algo como:
C:\\fakepath\\img.png