Ravi Raushan
Ravi Raushan

Reputation: 63

Redirect to function based detail view after submitting form

I created a model named Student. I created a model form. I want to go to detail view not the list view, after submitting model form. How do i do that ?

model.py

class Student(models.Model):
    student_name = models.CharField(max_length=100)
    father_name = models.CharField(max_length=100)

forms.py

class AdmissionForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = '__all__'

views.py

def admission_form(request):
    form = AdmissionForm()
    if request.method == 'POST':
        form = AdmissionForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('student-list') # i want to redirect to detail view 
    context = {'form':form}
    return render(request, 'student/admission_form.html', context)

In this admission form, i want to redirect to detail view of the student not the list view. How can i do that. In this code, i have redirected to list view.

def student_detail(request, id):
    stud = Student.objects.get(id=id)
    context = {'stud':stud}
    
    return render(request, 'student/student_detail.html', context)

urls.py

urlpatterns = [
    path('admission_form/', views.admission_form, name = 'admission-form'),
    path('student/', views.student_list, name = 'student-list'),
    path('student/<int:id>/', views.student_detail, name = 'student-detail'),
    

]

Upvotes: 0

Views: 362

Answers (1)

ruddra
ruddra

Reputation: 51998

form.save() will return an instance of Student model. You can use it's id in redirect like this:

def admission_form(request):
    form = AdmissionForm()
    if request.method == 'POST':
        form = AdmissionForm(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save()
            return redirect('student-detail', id=instance.pk)

Upvotes: 3

Related Questions