Cómo extraer el objeto de archivo de Django Form FileField

He creado un ModelForm con campos, title, file y content. aquí file es un campo de archivo(). Pero no puedo llamar al save() método de esta forma debido a algunas razones. Así que tengo que crear manualmente un objeto modelo y asignar valores limpios a ese objeto. Todo funcionó excepto ese FileField. El archivo no se guarda. ¿Cómo puedo arreglar esto? ¿Es el método correcto para extraer FileField?

Forma

class TestForm(forms.ModelForm):
    class Meta:
        model = Test
        fields = ('title','file', 'content',)

Vistas.py

 form = TestForm(request.POST,request.FILES)
 if form.is_valid():
     content = form.cleaned_data['content']
     file = form.cleaned_data['file']
     title = form.cleaned_data['title']
     fax = Fax()
     fax.title = title
     fax.file = file
     fax.content = content
     fax.save()

Aquí el archivo no se guarda. ¿Cómo puedo arreglar esto? ¡Cualquier ayuda será apreciada!

preguntado el 28 de agosto de 12 a las 13:08

en lugar de form.cleaned_data['file'], use request.FILES['file'] - vea docs.djangoproject.com/en/dev/topics/http/file-uploads/… -

¿Por qué no puede llamar al método de guardar en el formulario? La debería ser la forma correcta de hacerlo. -

@super9 es porque he creado más de un objeto con eso. Hay un bucle en el código, que he omitido para describirlo fácilmente:

3 Respuestas

has usado enctype="multipart/form-data" en su formulario Parece que el código está bien.

Respondido el 03 de Septiembre de 12 a las 10:09

Utilice este tipo de validación. esto puede funcionar

if request.method == 'POST':
    form = ModelFormWithFileField(request.POST, request.FILES)
    if form.is_valid():
        # file is saved
        form.save()
        return HttpResponseRedirect('/success/url/')``

Respondido 08 ago 13, 07:08

Creo que puedes usar

request.FILES['file']

para obtener el objeto de archivo

Respondido 28 ago 12, 13:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.