13Ago

Cómo añadir archivos del sistema de archivos sin usar el administrador de Django para comandos, scripts, etc.

Problema

Si tenemos un script interno de Django, como un comando, un servicio, etc… que no pasa por el uso del backoffice de Django a veces podemos tener la necesidad de añadir archivos a un modelo de Django.

Añadiendo archivos al modelo

En el ejemplo vamos a añadir una imagen que hay en el sistema de archivos visible por Django a un modelo de media de la aplicación.

Primero debemos importar el gestor de archivos de Django:

from django.core.files import File

Suponiendo que tengamos definido el siguiente modelo de datos en la aplicación media:

media/models.py

from __future__ import unicode_literals

from django.db import models

class Media(models.Model):
    file = models.FileField(upload_to='/opt/files', null=True, blank=True)

Podemos añadir al modelo un archivo con el siguiente script:

from media.models import Media
from django.core.files import File

fullpath_content = '/tmp/some_image.png'
media_entity = Media()

with open(fullpath_content, "rb") as opened_file:
    media_entity.file.save('some_image.png', File(opened_file), save=True)

media_entity.save()
Leave a comment