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()