2009-12-18 4 views
2

사용자가 파일을 업로드하고 해당 파일을 새 형식으로 변환합니다. 생성 된 파일을 DB에 어떻게 삽입합니까?Django : 기존 파일을 db에 어떻게 삽입합니까?

내가 명백한 field.file = newfile을하면 업로드하려고 시도합니다. 그래서, 파일 시스템에 파일을 쓰지 않고 파일을 데이터베이스에 추가하려면 어떻게해야할까요?

- 편집 - DB에 파일을 저장하고 싶지 않습니다. FileField가 FileField가 디스크에 파일을 쓰지 않고도 FileField가 가리키는 경로를 설정하고자합니다 (이미 디스크에 있으므로).

답변

1

간단한 대답은 장고에서 직접 수행 할 수있는 방법이 없으며 코어 개발자는 이에 열중하지 않습니다. 티켓 #652을 참조하십시오.

+0

티켓은 질문과 관련이 없습니다. 티켓은 DB 내부의 BLOB에 파일을 업로드하는 것이지만 질문은 업로드하는 대신 파일 시스템의 기존 파일을 가리 키도록 파일 필드를 변경하는 것입니다. . –

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) 

그런 다음이 스크립트의 출력을 사용하여 DB를 통해 실행!

관련 문제