Представление не возвращало объект HttpResponse при использовании redirect () - PullRequest
1 голос
/ 06 мая 2019

Я пытался создать форму модели для добавления новой записи в мои модели в 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',
        ]

модели.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')]

Я много ищу эту ошибку, но не могу ее решить!Что здесь происходит?

Ответы [ 2 ]

3 голосов
/ 06 мая 2019

Это не имеет ничего общего с самим redirect(..).Вы только что забыли кодовый путь .Возможно, что метод действительно POST, но форма недействительна.Таким образом, условие в первом if выполняется, а условие во втором if - нет.Прямо сейчас ваше представление ничего не возвратит (следовательно, вернет 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, мы отображаем страницу и отвечаем отображаемой страницей.

2 голосов
/ 06 мая 2019

Перенаправление не проблема.Проблема в том, что ваша форма недействительна, и представление ничего не меняет, если это произойдет

Вы должны сделать отступ в последней строке на один уровень, чтобы он уловил этот случай.

...