2011-04-21 2 views
14

장고에서 여러 파일 필드를 어떻게 처리합니까? 예를 들어 양식 필드가 하나만있는 경우 요청을 전달합니다. 파일 [ 'file']을 처리 함수로 전달합니다. 그러나 더 많은 파일이있을 때 어떻게 갈 수 있습니까?여러 파일 필드가있는 장고 양식

답변

9

request.FILES.get('filename', None)이 같은 양식 - 이름 필드의 존재에 응답 :

<input type="file" name="file1"></input> 
<input type="file" name="file2"></input> 

그런 request.FILES.get('file1', None)request.FILES.get('file2', None) 각각 당신에게 그 파일을 제공해야합니다 :

<input type="file" name="filename"></input> 

두 개의 같은 필드가 있다면.

이유는 멀티 파트 마임입니다. 세 부분 (양식 데이터, file1, file2)을 업로드해야하고 Django의 UploadFileHandler는 이것을 각각 request.POSTrequest.FILES으로 나눕니다.

+0

을하지 작동합니다. 'newsform = NewsAddForm (request.POST 또는 None, request.FILES.get ('image_news1 ', None), request.FILES.get ('image_news2 ', None))' – Aryan

29

나는 파티에 늦었지만, 잠시 동안 이것을 알아 내려고 노력했으며 결국 해결책을 얻었습니다. 여기에 사용 된 코드를 살펴보십시오. https://code.djangoproject.com/ticket/12446

getlist를 사용하여 다중 부분 값에 액세스 할 수 있습니다. 내 HTML 양식 인 경우 :

for afile in request.FILES.getlist('myfiles'): 
    # do something with afile 

이 제대로 나의 다음 단계는 처리 할 양식 필드/위젯을 작성 :

<form enctype="multipart/form-data" action="" method="post"> 
<input type="file" name="myfiles" multiple> 
<input type="submit" name="upload" value="Upload"> 
</form> 

내 장고 코드는 같을 것이다 처리합니다. 나는 여전히 장고를 처음 사용하기 때문에 처음에는 장고를 배우고있다.

+0

어떻게 해? 예를 보여줄 수 있습니까? 아티스트 사용자가 동일한 형식으로 같은 시간에 여러 파일을 업로드하고 싶습니다. –

0

다음은이 답변의 좋은 링크입니다 : https://github.com/Chive/django-multiupload. 그러나 ModelForm을 사용하지 않아서 몇 가지 사항을 변경해야했습니다. 는보기에서 나는 디스크에 코드와 저장된 파일 아래에 작성했습니다 :이 방법처럼 그것을 할

for each in form.cleaned_data['attachments']: 
    handle_uploaded_file(each) 

def uploadMyWork(request): 
    from .forms import UploadFileForm, handle_uploaded_file 
    print 'in uploadMyWork' 

    if request.method == 'GET': 
     print 'in uploadMyWork : GET' 
     form = UploadFileForm() 
    else: 
     form = UploadFileForm(request.POST, request.FILES) 
     print 'in uploadMyWork : POST' 
     #for each in form.cleaned_data['attachments']: 
     # handle_uploaded_file(each) 
     #return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"}) 

     if form.is_valid(): 
      print 'inside form valid' 
      for each in form.cleaned_data['attachments']: 
       handle_uploaded_file(each) 
      return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"}) 

    print 'returning to uploadmywork' 
    return render(request, 'stitchme/uploadMyWork.html', {'form': form, 'msg':'hi'})