사용자 업로드 파일에 사용자 이름과 파일 이름을 기반으로하는 경로가 지정된 시스템을 설정하려고합니다. this question에 대한 대답은 올바른 방향으로 나에게 지적한 것처럼 보이지만보기에서 구현에 약간 문제가 있습니다.파일을 사용자 정의 파일 경로에 업로드하는 방법
class Document(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100, blank=False, null=False)
date = models.DateTimeField(auto_now=True)
path = models.FileField(upload_to= custom_doc_file_path) # path should be /media/users/USERNAME/DOCUMENT_NAME
및 custom_doc_file_path은과 같이 정의된다 :
나는이 사용하는 모델이 관리자보기에서 파일을 업로드 할 때
이def custom_doc_file_path(instance, filename):
# creates media/users/USERNAME/FILENAME
return '/'.join(['users', instance.user.username, get_directory_name(filename), filename])
def get_directory_name(filename):
directory = filename.replace('.', '_')
directory = directory.replace(' ', '_')
return directory
이 잘 작동을하지만, 그럴 수 없어 내가 만든 뷰에서 그것을 복제하는 것 같습니다. 내보기는 다음과 같습니다.
def create_button(request):
if request.method == 'POST':
document = Document.objects.create(
user = request.user,
name = request.POST['name'],
path = request.POST['uploaded_file']
)
document.save()
그러나이 경로를 사용하면 파일 이름으로 저장됩니다. 공백을 남기고 그 경로에 파일을 저장하려고하면 모델이 경로를 전혀 만들지 않습니다. 또한 파일을 request.FILES
에 있어야한다고 생각하지만 이것은 빈 dict로 표시됩니다.
본질적으로 나는이 모델을 통해 새 문서를 추가 할 때 관리자의 동작을 복제하기 위해 무엇을해야 하는지를 알고 싶습니다.
어떤 형태를 사용하지 않으면 다음 당신은 당신의 모델에 대한 양식을 만드는 시도 할 수 있습니다 ? 'document = Document.objects.create (...)'를 사용한다면'document.save()'는 필요 없습니다. https://docs.djangoproject.com/en/dev/topics/db/queries/# 객체 생성 –