Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
Campo de modelo de Django para cargar archivos desde una aplicación pero guardar con otra

Estamos desarrollando una intranet con Django que debe tener una gestión de archivos coherente y centralizada. Implementamos una aplicación de administrador de archivos que debería manejar todas las cargas y descargas, hacer verificaciones de tipos MIME, verificaciones de permisos, etc.

La carga se logra a través de un formulario de Django:

 class UploadFileForm(forms.ModelForm): class Meta: model = PhysicalFile fields = ('path', 'directory') def save(self, commit=True): """ Override save method of ModelForm to create Physical File object of uploaded file and to process meta data """ # Proceed with default behaviour but DO NOT commit! # pfile contains the PhysicalFile object which is not yet written to DB pfile = super(UploadFileForm, self).save(commit=False) # set pfile's meta data according to: # https://docs.djangoproject.com/en/1.11/ref/files/uploads/ pfile.name = self.cleaned_data['path'].name pfile.size = self.cleaned_data['path'].size pfile.mimetype = self.cleaned_data['path'].content_type # NOW save to database, ignoring commit parameter pfile.save() return pfile

Ahora necesitamos realizar cargas en OTRA aplicación (por ejemplo, una aplicación de miembros con carga de imagen de perfil) utilizando el mismo formulario que el anterior. Sin embargo, debe incluirse en un formulario específico de la aplicación. Por ejemplo, un formulario con nombre, dirección, etc. Básicamente, solo necesitaríamos guardar la clave foránea correspondiente del archivo en el modelo de miembro y procesar la carga con el formulario del administrador de archivos.

Por eso pensamos en un archivo personalizado. Pero esto no está funcionando en absoluto...

 class FilemanagerUploadField(models.ForeignKey): def __init__(self, upload_to=None, *args, **kwargs): # Will be used later to bind specific apps to specific directories self.upload_to = upload_to # Bind PhysicalFile as default Model super(FilemanagerUploadField, self).__init__('filemanager.PhysicalFile') def formfield(self, **kwargs): """ Taken from django's FileField but does NOT WORK""" defaults = {'form_class': forms.FileField, 'max_length': self.max_length} if 'initial' in kwargs: defaults['required'] = False defaults.update(kwargs) return super(FilemanagerUploadField, self).formfield(**defaults) def save(self): # somewho run form from here with uploaded data and return foreignKey

Realmente no soy capaz de controlar esos campos de modelos personalizados... Necesitamos que funcione como un FileField (validación de widgets y demás) pero que se guarde como ForeignKey (en el Modelo de archivo físico real en otra aplicación)...

Si hay otra manera de lograr lo que estamos buscando, por favor dígame.

tldr; Cargue archivos en la aplicación A pero deje que la aplicación B los procese, guarde la ruta del archivo, los metadatos, etc. y devuelva la clave extranjera del objeto procesado a A para guardarlo en la base de datos. ¿Campo de modelo personalizado?

about 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda