2009-12-18 3 views
2

Пользователь загружает файл, и я конвертирую его в новый формат. Как вставить созданный файл в БД?Django: Как вставить существующий файл в db?

Когда я делаю очевидный файл field.file = newfile, он пытается его загрузить. Итак, я думаю, вопрос в том, как я могу добавить файл в базу данных, не пытаясь записать файл в файловую систему?

--Edit-- Я не хочу хранить файл в БД. Я просто хочу установить путь, на который указывает FileField, не имея FileField, пытающегося записать файл на диск (потому что он уже находится на диске).

ответ

1

Короткий ответ, нет прямого способа сделать это в Django, и основные разработчики не заинтересованы в нем - см. Билет #652.

+0

Билет не связан с вопросом - билет должен загрузить файл в блоб внутри БД, в то время как вопрос заключается в изменении поля файла, чтобы указать на существующий файл в файловой системе, а не на загрузку. , –

3

Вы можете, конечно, по-прежнему делать это (как я есть), напрямую изменяя базу данных. Вы можете создать код 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) 

Затем используйте вывод данного скрипта и запустить его через БД!

Смежные вопросы