2014-07-22 2 views
0

models.pyformset을 사용한 여러 파일 업로드?

class Album(models.Model): 
    file_upload = models.FileField(upload_to=content_file_name) 
    name_content = models.CharField(max_length=100) 

그리고 기능이 내 views.py

from django.forms.formsets import formset_factory 
def viewalbum(request):  
    AlbumFormSet = formset_factory(Albumform, extra=3, max_num=10,) 
    if request.method == 'POST': 
     formset = AlbumFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      albumvalue = Album() 
      albumvalue.name_content = request.POST.get('name_content', None) 
      albumvalue.file_upload = request.FILES['file_upload'] 
      albumvalue.save() 


      return HttpResponseRedirect(reverse('views.viewalbum')) 
    else: 
     formset = AlbumFormSet() 
    return render_to_response('audio/test.html',{'formset': formset}, context_instance=RequestContext(request)) 

하고 HTML 외모 여기

def content_file_name(instance, filename): 
    upload_dir = os.path.join('uploads', 'resource') 
    return os.path.join(upload_dir, filename) 

forms.py

class Albumform(forms.Form): 
    name_content = forms.CharField(max_length=100) 
    file_upload = forms.FileField('please select') 

입니다 이렇게

<form action="" method="POST" enctype="multipart/form-data"> 
    {{ formset.management_form }} 
    {% csrf_token %} 
    <table> 
     {% for form in formset.forms %} 
      {{ form }} 
     {% endfor %} 
    </table> 

문제는 내가 오직 한 번에 하나의 파일을 업로드 할 수 있습니다. 나에게 같은 시간에 여러 파일을 업로드하고 리소스 폴더에 저장하는 솔루션을 제공합니다. 감사합니다

답변

0

여러 파일을 업로드하려면 여러 파일 필이 필요합니다. 그것이 당신의 선택입니다 A. 당신이 그것을 선택한다면, formset을 만들고 그것을 사용하여 여러 파일 업로드를 제공하십시오.

옵션 B는 여러 파일 업로드를 가능하게하는 일종의 자바 스크립트 위젯을 사용하는 것입니다.

+0

formset에 대해 좀 더 자세히 알려주시겠습니까? 위의 질문에 어떻게 formset을 추가 할 수 있습니까? –

+0

https://docs.djangoproject.com/en/dev/topics/forms/formsets/. 당신은 그것에 대한 다른 데이터베이스 구조가 필요할 수도 있습니다. 하나의 클래스에는 앨범 이름을, 다른 앨범에는 (여러 개의) 외래 키로 연결된 다른 앨범에있는 파일을 유지하십시오. 그런 다음 여러 앨범에서 동일한 이미지를 사용할 수 있습니다. 그것의 나머지는 내가 추가 한 장고 링크에서 모두 내림차순입니다. –

+0

나는이 오류를 반환하려고했으나 [u'ManagementForm 데이터가 없거나 '']로 변경되었습니다. –