0

In the function "createProject" of views.py, I want that after submitting the form user should redirect to the "projects" page.

But I don't know what is my mistake here. After submitting the form it does not redirect the user to "projects" page but remains on the same page.

"views.py" file:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .forms import ProjectForm
from .models import Project


def projects(request):
    projects = Project.objects.all()
    context = {'projects':projects}
    return render(request, 'projects/projects.html', context)

def project(request, pk):
    return render(request, 'projects/single-project.html')

def createProject(request):
    form = ProjectForm()

    if request.method == 'POST':
        form = ProjectForm(request.POST)
        if form.is_valid():
            form.save()
            redirect('projects')

    context = {'form':form}
    return render(request, 'projects/project_form.html', context)

Here is "urls.py" file:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.projects, name = 'projects'),
    path('project/<str:pk>/', views.project, name = 'project'),
    path('create-project/', views.createProject, name = 'create-project'),
]

Here is "project-form.html" [I am using Django "ModelForm"]:

from django.db.models.base import Model
from django.forms import ModelForm
from .models import Project


class ProjectForm(ModelForm):
    class Meta:
        model = Project
        fields = ['title', 'description', 'demo_link', 'source_link', 'tags']

Can anyone help me in finding the mistake here ? Why after submitting the form, it is not redirecting it to the "projects" page and remain on same page?

Kapil Sharma
  • 146
  • 2
  • 12
  • Either your request method is not post or your form is not valid. A debugger would help. Everything else looks correct to me. – movileanuv Sep 05 '21 at 06:55
  • The data I am giving in form is getting saved that means the form is valid(form.save() in if condition), and I can see in terminal about the POST request. – Kapil Sharma Sep 05 '21 at 07:00
  • Wow, ok. Then does the projects.html look the same as project_form.html? Have you tried another redirect, e.g. Admin login? How does the response look like in the networks tab of your browser? – movileanuv Sep 05 '21 at 07:06

1 Answers1

1

This issue is because the redirect response was never returned, so:

        if form.is_valid():
            form.save()
            return redirect('projects')
            # ^^^ Add this
Brian Destura
  • 11,487
  • 3
  • 18
  • 34