Django模型表单ImageField上传

23

我对Django还比较新,使用ModelForm处理图像上传时遇到了问题。 我的模型如下:

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']

而 View 函数是:

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>

有人可以帮我或者给我一个图片上传的例子吗? 谢谢!


1
你能说一下你的问题是什么吗? - Anto
我的问题是图片没有上传到目录中。 - Wei Xu
展示你的模板。 - Rohan
一个新项目已经提交到数据库,但是没有上传的文件?你有那个文件的链接,但是没有访问权限吗? - Nuno_147
是的,项目已经提交到数据库,但是图片还没有上传。我在模型中指定了存储图像的位置。 - Wei Xu
2个回答

58

好的,谢谢大家。我发现自己犯了一个愚蠢的错误。 我应该在 <form> 中添加 enctype="multipart/form-data", 否则,文件将无法上传。


1
感谢您的帖子。对于我的情况,即使所有设置与您的相同,包括enctype,但一开始仍然无法上传图像/文件。我重新启动了网页,并多次重新运行,最终它成功了。您的帖子帮助我确认了我的设置是正确的。谢谢。 - zhihong

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接