文件不会从Django中的Web表单上传

Ben*_*tin 6 django file-upload django-forms

你好 - 我写了一个非常简单的应用程序来接受工作申请,包括简历上传.

在本地运行捆绑服务器进行开发,我可以通过前端和管理界面上的Web表单成功上传文件.在远程服务器上运行它(带有mod_python的Apache)我可以通过管理界面成功上传文件,但尝试通过Web前端不会产生上传文件.

我添加FILE_UPLOAD_PERMISSIONS = 0644了设置,检查了两个设置文件,并查找了其他地方描述的类似问题.图我要么忘记了一个设置,要么需要以不同的方式解决这个问题.有什么建议?

供参考,包括代码.

该模型:

class Application(models.Model):
    job = models.ForeignKey('JobOpening')
    name = models.CharField(max_length=100)
    email = models.EmailField()
    date_applied = models.DateField()
    cover_letter = models.TextField()
    resume = models.FileField(upload_to='job_applications', blank=True)

    def __str__(self):
        return self.name

    def save(self):
        if not self.date_applied:
            self.date_applied = datetime.today
        super(Application, self).save()
Run Code Online (Sandbox Code Playgroud)

表格:

class JobApplicationForm(ModelForm):    
    class Meta:
        model = Application

    def save(self, commit=True, fail_silently=False):
        super(JobApplicationForm, self).save(commit)
Run Code Online (Sandbox Code Playgroud)

风景:

def job_application(request):
    ajax = request.GET.has_key('ajax')
    if request.method == 'POST':
        form = JobApplicationForm(request.POST, request.FILES)
        if form.is_valid():
            new_application = form.save()
            return HttpResponseRedirect('/about/employment/apply/sent/')
    elif request.GET.has_key('job'):
        job = request.GET['job']
        form = JobApplicationForm({'job': job})
    else:
        return HttpResponseRedirect('/about/')
    t = loader.get_template('employment/job_application.html')
    c = Context({
        'form': form,
    })
    return HttpResponse(t.render(c))
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 26

您不显示模板.如果我不得不猜测,看到上传通过管理界面工作,我会说你忘了把enctype放在你的表格标签中:

<form enctype="multipart/form-data" method="post" action="/foo/">
Run Code Online (Sandbox Code Playgroud)

  • 我忘了提交表单模板,以为自己拥有了,没有检查开发人员的表单。谢谢您让我看看本应显而易见的内容。 (2认同)

Sov*_*iut 5

首先,您确定模板中带有enctype="multipart/form-data"标志吗?

<form action="." method="POST" enctype="multipart/form-data">
    ...
</form>
Run Code Online (Sandbox Code Playgroud)

首先,无需save()在ModelForm中进行覆盖,因为您无需在其中进行任何额外的工作。

其次,无需存储new_application变量,只需调用即可form.save()

第三,您应该在JobOpening模型中使用一个Slug字段,并将其传递到querystring中。请记住,这不是PHP,请使用像/jobs/opening/my-cool-job-opening/这样的漂亮url ,这就是的用途。独特的人类可读网址。就目前而言,您的GET代码非常脆弱。

最后,您可能需要使用render_to_response快捷方式功能,因为它可以省去冗长地调用模板加载器,创建上下文并手动呈现它们的麻烦。