How to assign a local file to the FileField in Django? How to assign a local file to the FileField in Django? python python

How to assign a local file to the FileField in Django?


Django uses it's own file type (with a sightly enhanced functionality). Anyway Django's file type works like a decorator, so you can simply wrap it around existing file objects to meet the needs of the Django API.

from django.core.files import Filelocal_file = open('mytest.pdf')djangofile = File(local_file)pdfImage.myfile.save('new', djangofile)local_file.close()

You can of course decorate the file on the fly by writing the following (one line less):

pdfImage.myfile.save('new', File(local_file))


if you are getting error like:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position...

then you have to open the file in binary mode: open("mytest.pdf", "rb")

full example:

from django.core.files import FilepdfImage = FileSaver()pdfImage.myfile.save('new.pdf', File(open('mytest.pdf','rb')))


If you don't want to open the file, you can also move the file to the media folder and directly set myfile.name with the relative path to MEDIA_ROOT :

import osos.rename('mytest.pdf', '/media/files/mytest.pdf')pdfImage = FileSaver()pdfImage.myfile.name = '/files/mytest.pdf'pdfImage.save()