用户上传文件并将该文件转换为新格式。如何将创建的文件插入数据库?
当我做明显的field.file = newfile时,它会尝试上传它。所以,我想问题是,如何在不尝试将文件写入文件系统的情况下将文件添加到数据库中?
- Edit-- 我不想将文件存储在数据库中。我只想设置FileField指向的路径,而不让FileField尝试将文件写入磁盘(因为它已经在磁盘上)。
答案 0 :(得分:3)
你当然可以通过直接修改数据库来做到这一点(就像我刚才那样)。您可以使用基于django的脚本创建要执行的sql代码,然后通过数据库运行它(在我的情况下是sqlite3):
# Set up django environment
from django.core.management import setup_environ
from app import settings
setup_environ(settings)
from project.app.models import MyModel
# Prints sql to update file locations since django won't :(
for myModel in MyModel.objects.all():
# You can do the below even better if you use the same method as the model uses
# to generate upload_to
file_name = 'my_file_this_should_depend_on_myModel'
file_location = 'path/to/file/dir/%s' % file_name
print "UPDATE app_mymodel SET file_field='%s' WHERE id=%s;" % \
(file_location, myModel.id)
然后使用此脚本的输出并通过您的数据库运行它!
答案 1 :(得分:1)
简短的回答,在Django中没有直接的方法可以做到这一点,并且核心开发人员并不热衷于此 - 请参阅票证#652。
答案 2 :(得分:0)
Set Django's FileField to an existing file是一个较新的副本,但答案似乎比直接修改数据库更好。