2011-11-26 3 views
1

레거시 DB와 이미지가있는 폴더가 있고 특정 테이블의 일부 행에 의해 참조되는 폴더가 있고 그 데이터를 새로운 데이터베이스로 마이그레이션해야합니다. 장고 모델. 특정 문제는 업로드를 "수행"하는 방법이지만 관리 명령에서 수행하는 것입니다.레거시 DB를 이미지 파일로 Django로 마이그레이션

참조 된 필드가있는 테이블을 해당 모델로 마이그레이션 할 때도 모델의 이미지 필드를 설정해야하며 그에 따라 ImageFieldupload_to 매개 변수에 따라 파일 이름을 처리해야합니다.

파일 경로 또는 파일 설명자에서 이미지 필드를 프로그래밍 방식으로 채우는 방법은 무엇입니까?

답변

0

한 가지 방법은 settings.py에서 레거시 데이터베이스를 지정하는 유틸리티 django 프로젝트를 만드는 것입니다. 그런 다음 inspectdb 관리 명령을 사용하여 레거시 데이터베이스의 django 모델 표현을 만듭니다. 마지막으로 dumpdata를 사용하여 데이터를 JSON 형식으로 가져옵니다.

그런 다음 마침내 새 모델에 이전 데이터를 삽입하는 JSON 스크립트를 만들 수 있습니다.

+0

나는 이것에 대해 생각해 봤지만 경로가 올바르지 않기 때문에 여전히 문제가 남아 있습니다. 또한, 가져 오기 작업에 따라'upload_to' 매개 변수에 따라 새 파일 이름을 다시 생성해야합니다. –

+0

ImageField는 실제로는 CharField입니다. 따라서 단순히 문자열 인 것처럼 값을 조작 할 수 있습니다. 예. do image_field = image_field.replace ("old_path /", "new_path /") – benjaoming

+0

그게 내가 지금하고있는 일이야. 이전 필드 값은 이미지 파일의 기본 이름 만 포함하므로 생성되는 인스턴스와 함께 모델에 첨부 된 ImageField 인스턴스의 'upload_to' 속성에 해당 값을 전달합니다. 그런 다음 원본 파일 내용 (모든 이미지를 포함하는 디렉토리는 스크립트의 인수)을'upload_to' 호출의 반환 값으로 복사하고,'MEDIA_ROOT' 설정에 합류시킵니다. 작동하지만 클라우드 서비스와 같은 다른 종류의 파일 저장소와 호환됩니까? –