Search code examples
pythondjangodjango-viewsmodelformdjango-file-upload

"redirect" function of django is not working and after submitting the form, user remains on same page


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?


Solution

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

            if form.is_valid():
                form.save()
                return redirect('projects')
                # ^^^ Add this