En mi proyecto reciente, tuve que crear un modelo genérico con un solo campo de archivo, porque la idea era utilizar varias cargas de archivos en varios modelos de sistemas.
Para esto, creé este modelo genérico con clave externa genérica y en la vista de agregar creo un formset con el campo extra = 1 y en la plantilla a través de jquery agrego formularios dentro de mi formset.
Además, funciona silenciosamente, pero no puedo ajustar mi vista de edición.
En mi vista de edición lo intento:
ModelGenericFormset = modelformset_factory( ModelsFileGeneric, form=AddModelsGenericForm ) query_files = ModelsFileGeneric.objects.filter( object_id=model_related_to_generic_model_with_file_field.id, ) files = ModelGenericFormset(queryset=query_files)y en request.post:
files_form_set = ModelGenericFormset( request.POST, request.FILES ) for file_form in files_form_set: file = file_form.save(commit=False) setattr( 'upload_destination', 'path_to_upload' ) file.content_object = model_related_to_generic_model_with_file_field file.save()Una observación: como este modelo donde está el campo de archivo es un modelo extremadamente genérico (por esta razón el uso de la clave externa genérica), también necesito en tiempo de ejecución (en el guardar a la vista después de la publicación) para cambiar el atributo upload_to de el campo (esto ya fue arreglado y funciona bien). Hago esta edición del atributo "upload_to" porque dependiendo del modelo al que le estoy enviando varios archivos, variará la ruta desde donde se guardarán los archivos.
Pero al guardar la vista de edición, se produce este error:
ModelsFileGeneric no se pudo cambiar porque los datos no se validaron.
Y el error está en:
archivo = file_form.save(commit=Falso)
Ya no sé qué hacer. ¡Gracias!