• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

269
Views
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 3 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error