Skip to main content
 首页 » 编程设计

python之使用 redirect() 时 View 没有返回 HttpResponse 对象

2025年05月04日20zhenyulu

我尝试创建模型表单以在 Django 中向我的模型添加新记录,但出现此错误:

The view post.views.add_job_resume didn't return an object. It returned None instead. 

这是我的文件(请注意,在这个文件中我的代码比我在这里写的要多):

view.py

def add_job_resume(request): 
    if request.method=="POST": 
        form = AddJobForm(request.POST) 
        if form.is_valid(): 
            job_resume = form.save(commit=False) 
            job_resume.user= request.user 
            job_resume.save() 
            return redirect('view_job_resume') 
 
    else: 
        form = AddJobForm() 
        return render(request, 'education/job_research_education_records/job_resume/add_job_resume.html', {'form': form}) 

forms.py

class AddJobForm(ModelForm): 
       class Meta: 
        model = JobRecord 
        fields = [ 
            'title', 
            'explains', 
            'post', 
            'organization', 
            'time_start', 
            'time_end', 
            'upload_url', 
        ] 

models.py

class JobRecord(models.Model): 
    user = models.ForeignKey(User, on_delete=models.PROTECT) 
    title = models.TextField(max_length=250, blank=False) 
    explains = models.TextField(max_length=500, blank=True) 
    post = models.TextField(max_length=100, blank=False) 
    organization = models.TextField(max_length=100, blank=False) 
    time_start = models.TextField(max_length=100) 
    time_end = models.TextField(max_length=100) 
    upload_url = models.FileField(upload_to='job-resume-files/') 
 
    def __str__(self): 
        return self.title 

add_job_resume.html

<form method="post" > 
    {% csrf_token %} 
    {{form.as_p }} 
    <button type="submit" class="btn btn-info">add</button> 
</form> 

urls.py

urlpatterns = [ 
   path('edu/resume/job/', views.view_job_resume, name='view_job_resume'), 
   path('edu/resume/job/add', views.add_job_resume, name='add_job_resume')] 

我搜索了很多这个错误,但我无法解决它!到底是怎么回事?

请您参考如下方法:

这与 redirect(..) 本身无关。您只是忘记了一个代码路径。有可能方法确实是 POST,但表单无效。所以第一个 if 中的条件得到满足,但第二个 if 中的条件不满足。现在,对于这种情况,您的 View 将不返回任何内容(因此返回 None)。

简单地重新渲染模板是很常见的,但现在使用无效的表单,这样表单就可以显示错误,例如:

def add_job_resume(request): 
    if request.method=="POST": 
        form = AddJobForm(request.POST) 
        if form.is_valid(): 
            job_resume = form.save(commit=False) 
            job_resume.user= request.user 
            job_resume.save() 
            return redirect('view_job_resume') 
 
    else: 
        form = AddJobForm() 
    # Not placed under the else 
    return render( 
        request, 
        'education/job_research_education_records/job_resume/add_job_resume.html', 
        {'form': form} 
    )

请注意 render 不放在 else 部分下。事实上,无论方法是 POST 且表单无效,还是方法不是 POST,我们都会呈现页面并使用呈现的页面进行响应。