Django: Cómo crear un formulario con un campo para imágenes o documentos
Necesito añadir un formulario que tenga un campo que permita a los usuarios subir documentos (.pdf, etc) o imágenes (.png, .jpeg, etc). Sé que Django tiene los campos de modelo FileField e ImageField.
¿Cómo podría crear un formulario que detecte el tipo de subida y utilice el tipo de campo correcto?
davy.ai
Para crear un formulario que detecte el tipo de carga y utilice el tipo de campo correcto, puedes utilizar el tipo de Multipurpose Internet Mail Extensions (extensiones de correo de Internet multipropósito, MIME) del archivo cargado.
En primer lugar, importa el módulo de formularios de Django:
Luego, crea un formulario que incluya tanto un campo FileField como un campo ImageField:
A continuación, define una función que valide el archivo cargado y devuelva el tipo de campo relevante:
Esta función utiliza el paquete python-magic para determinar el tipo MIME del archivo cargado. Si el tipo MIME contiene “image”, entonces el archivo es una imagen; de lo contrario, si contiene “pdf”, entonces el archivo es un documento. Si el tipo MIME no coincide con ninguno de los criterios, se devuelve
None
.Por último, modifica el método
clean_file()
del formulario para detectar el tipo de archivo y utilizar el campo relevante:Aquí, anulamos el método
clean_file()
del formulario, que es el responsable de validar y limpiar el campofile
. El método obtiene primero el objeto de archivo cargado del diccionario de datos limpios. Luego llama a la funciónvalidate_file_type()
para determinar el tipo MIME del archivo. Si el archivo es una imagen, se devuelve el campoimage
. Si es un documento, se devuelve el campofile
. Por último, si el tipo de archivo no coincide con ninguno de los criterios, se genera un error de validación.Con este código, cuando los usuarios envíen un formulario con un archivo cargado, el formulario detectará si el archivo es una imagen o un documento y utilizará el tipo de campo apropiado.