2009-06-01 2 views
2

사용자의 이력서를 수락하는 FileField가있는 장고 양식이 있습니다. 나는 이력서를 html 문서로 변환 할 예정이다. 그래서 원본 문서를 즉시 pickling하고 db colum에 저장 한 다음 나중에 unpickle하고 변환합니다. 그게 가능하니?장고 양식에서 파일을 업로드 할 수 있습니까? InMemoryUploadedFile을 의미합니다.

+0

왜 처음부터 피클 링을하고 싶습니까? –

+0

파일 시스템에 직접 저장할 수 없습니다. 변환에 성공하면 두 파일 만 저장합니다. 원본과 변환 된 것. 그게 정확한 파일을 저장할 중개 장소가 필요한 이유입니다. 그래서 나는 소금물에 절이는 것을 생각했다. –

답변

3

파일을 저장 한 다음 변환하려고 할 때 다시 열면 훨씬 좋습니다. 그것을 pickling하고 데이터베이스에 저장하는 것은 성능에 큰 영향을 줄 것입니다. 특히 파일이 큰 경우.

+0

나는 천천히 같은 결론에 도달했다고 생각한다. –

3

필자는 FileField 인스턴스를 pickling 할 필요가 없다고 생각합니다. 모든 FileField 저장소는 파일이 저장된 드라이브의 경로입니다 ... 그 의미에서 파일은 나중에 사용하기 위해 저장되어 있으며 필드 인스턴스를 pickling하면 실제로 많은 영향을 미치지 않습니다. 사실, 필드는 실제로 데이터를 저장하지 않기 때문에 절대로 실제로 아무 것도하지 않습니다 :-) django docs on FileField을 참조하십시오.

FileField가있는 모델을 저장하면 파일 경로를 이력서에 저장합니다. 나중에 따라 오는 모든 프로세스는 드라이브에서 이력서를로드하고 HTML로 변환 한 다음 원본 이력서를 삭제하거나 원하는 다른 "정리"처리를 수행 할 수 있습니다.

실제 파일 내용을 데이터베이스에 저장해야하는 경우 대신 모델의 Blob 필드를 만드는 것이 좋습니다. blob은 DB에 따라 다릅니다. 이 question on SO에는 베어 본 구현이 있습니다. DB에 바이너리를 저장하는 것은 많은 사람들이 기분이 나쁜 아이디어라고 생각하지만 실제로 앱을 그런 식으로 구성하는 것에주의해야합니다. 이 구글 django-developers forum post 장고와 얼룩에 대한 좋은 토론과 샘플 코드가 있습니다.

+0

나는 로컬 파일의 경로를 저장하는 FileField와 관련하여 귀하의 요점을 참조하십시오. 하지만 두 번째 단락에서 "이력서에 파일 경로를 저장합니다"라고하셨습니다. 그게 무슨 뜻 이니? 그리고 얼룩에 대해서, 당연히 나는 그렇게하지 않으려합니다. 난 단지 모든 이력서의 HTML 콘텐츠를 DB에 저장하고 싶습니다. –

관련 문제