2013-10-28 97 views
17

我對Django來說很新,我遇到了使用ModelForm處理圖片上傳的問題。 我的模型如下:Django ModelForm Imagefield上傳

class Project(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.CharField(max_length=2000) 
    startDate = models.DateField(auto_now_add=True) 
    photo = models.ImageField(upload_to="projectimg/", null=True, blank=True) 

而且的ModelForm是如下:

class AddProjectForm(ModelForm): 
    class Meta: 
     model = Project 
     widgets = { 
      'description': Textarea(attrs={'cols': 80, 'rows': 50}), 
     } 
     fields = ['name', 'description', 'photo'] 

和視圖功能是:

def addProject(request, template_name): 
if request.method == 'POST': 
    addprojectform = AddProjectForm(request.POST,request.FILES) 
    print addprojectform 
    if addprojectform.is_valid(): 
     newproject = addprojectform.save(commit=False) 
     print newproject 
     print request.FILES 
     newproject.photo = request.FILES['photo'] 
     newproject.save() 
     print newproject.photo 
else: 
    addprojectform = AddProjectForm() 

newProposalNum = projectProposal.objects.filter(solved=False).count() 
return render(request, template_name, {'addprojectform':addprojectform, 
             'newProposalNum':newProposalNum}) 

模板是:

<form class="bs-example form-horizontal" method="post" action="">{% csrf_token %} 
         <h2>Project Name</h2><br> 
         {{ addprojectform.name }}<br> 
         <h2>Project Description</h2> 
         {{ addprojectform.description }}<br> 
         <h2>Image Upload</h2><br> 
         {{ addprojectform.photo }}<br> 
         <input type="submit" class="btn btn-success" value="Add Project"> 
        </form> 

Can any一個幫助我,或者你能舉一個圖像上傳的例子嗎? 謝謝!

+1

你能提一下你有什麼問題......? – Anto

+0

我的問題是圖像沒有上傳到目錄。 –

+0

向我們展示您的模板。 – Rohan

回答

40

好的,謝謝大家。我發現自己犯了一個愚蠢的錯誤。 我應該在<form> 中加enctype="multipart/form-data"否則,它不會上傳文件。

+0

感謝帖子,對於我的情況,甚至所有的設置都與你的enctype一樣,但是在開始時,它仍然沒有上傳圖像/文件。我重新啓動了網頁,並重新運行了幾次,最後,它工作。您的帖子幫助我確認我的設置是正確的。謝謝 – zhihong