Aquí está mi modelo. Lo que quiero hacer es generar un nuevo archivo y sobrescribir el existente cada vez que se guarda una instancia de modelo:
class Kitten(models.Model):
claw_size = ...
license_file = models.FileField(blank=True, upload_to='license')
def save(self, *args, **kwargs):
#Generate a new license file overwriting any previous version
#and update file path
self.license_file = ???
super(Request,self).save(*args, **kwargs)
Veo mucha documentación sobre cómo cargar un archivo. Pero, ¿cómo puedo generar un archivo, asignarlo a un campo de modelo y hacer que Django lo almacene en el lugar correcto?
fuente
convert_to_pdf
comando django-wkhtmltopdf . ¡¡Gracias!!f = open('/path/to/file', 'r')
para Zip tipo de archivo,f = open('/path/to/file.zip', 'rb')
MEDIA_ROOT
no se compartió con el mismo volumen en el trabajador de apio. Compartir el volumen nombrado lo solucionó ( ref ).La respuesta aceptada es ciertamente una buena solución, pero esta es la forma en que genere un CSV y lo sirvo desde una vista.
Pensé que valía la pena poner esto aquí, ya que me tomó un poco de manipulación para obtener todo el comportamiento deseable (sobrescribir el archivo existente, almacenarlo en el lugar correcto, no crear archivos duplicados, etc.).
Django 1.4.1
Python 2.7.3
fuente
Es una buena práctica utilizar un administrador de contexto o llamar
close()
en caso de excepciones durante el proceso de guardado del archivo. Podría suceder si su backend de almacenamiento no funciona, etc.Cualquier comportamiento de sobrescritura debe configurarse en su backend de almacenamiento. Por ejemplo, S3Boto3Storage tiene una configuración
AWS_S3_FILE_OVERWRITE
. Si está utilizandoFileSystemStorage
, puede escribir un mixin personalizado .También es posible que desee llamar al método de guardado del modelo en lugar del método de guardado de FileField si desea que ocurran efectos secundarios personalizados, como las marcas de tiempo actualizadas por última vez. Si ese es el caso, también puede establecer el atributo de nombre del archivo en el nombre del archivo, que es relativo a
MEDIA_ROOT
. Tiene como valor predeterminado la ruta completa del archivo, lo que puede causar problemas si no lo configura; consulte Archivo .__ init __ () y File.name .Aquí hay un ejemplo donde
self
está la instancia del modelo dondemy_file
está FileField / ImageFile, llamandosave()
a toda la instancia del modelo en lugar de solo a FileField:fuente