장고 모델에서 파일업로드 후 저장하는 위치 관련해서 커스텀 질문입니다. 현재 폼에서 각각

 
DongHyeok Lee

장고 모델에서 파일업로드 후 저장하는 위치 관련해서 커스텀 질문입니다.

현재 폼에서 각각 분류 파일을 올리려고 하고 있습니다.
(예를들어 이미지 / txt / pdf 등등으로 폼에서 분류된 input이 있습니다.)

그런데 저장하는 방식에서 있어서,

FileField의 upload_to의 값을 media/(파일분류) 로 잡으니,
이름이 중복되는 경우를 방지하고자
from django.utils.translation import ugettext_lazy as _
를 사용했는데, 나중에 해당 값을 가져올 경우 파일 이름이 실제 올린 것과
다르게 저장이 되어서 이를 해결하고자

파일을 업로드할 때, 유저 이름을 기반으로 폴더를 각각의 media/txt/(유저이름)
그리고 media/pdf/(유저이름)을 묶으려고 하고 있는데
모델에서 이 부분을 해결하고자

def upload_path_handler_txt(instance, filename):
return ‘meida/txt/{0}’.format(instance.User.email, filename)
라고 함수를 만들어 해당 경로에 이 함수를 넣었습니다.
(User는 email과 password만 있는 테이블입니다.)

그러고 나서 로컬에서 실행시켰더니, User라는 테이블 명을 인식을 못하는 상황입니다. (조금 이야기가 길었네요.)

장고 독스에서는 시간대 별로 폴더를 생성할 수 있다고 봤는데, 유저 이름으로 폴더를 생성하는 방법을 어떻게 해야할까요?

(아니면 자체적으로 따로 만들어야할까요? 스토리지를?)

  • DongHyeok Lee

    return 부분에 meida라고 쓴거는 오타입니다….ㅠㅠ

    Chinseok Lee

    instance 는 어떤 모델의 인스턴스인가요? 해당 모델은 User 모델에 대해 ForeignKey 관계를 가지고 있나요? 그렇다면 instance.user.email 이 되어야 하지 않나요? 모델관계를 정확히 알려주셔야 정확한 답변이 가능합니다.

    그리고, “User라는 테이블 명을 인식을 못하는 상황” 이라고 하셨는데, ORM 을 다르게 이해하고 계신 듯 합니다.

    Donghyun Cho

    instance의 Model에서 User 모델을 ForeignKey로 연결된것 같은데, orm에서는 기본값으로 소문자를 사용합니다. 정확한건 모델을 봐야 알겠지만, 제 추측이 맞다면 instance.user.email로 고치면 해결이 될 것 같네요.

Advertisements