Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提交表单后重定向到基于函数的详细视图_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 提交表单后重定向到基于函数的详细视图

Python 提交表单后重定向到基于函数的详细视图,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我创建了一个名为Student的模型。我创建了一个模型表单。提交模型表单后,我想转到详细视图而不是列表视图。 我该怎么做 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):

我创建了一个名为Student的模型。我创建了一个模型表单。提交模型表单后,我想转到详细视图而不是列表视图。 我该怎么做

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)
在这个录取表中,我想重定向到学生的详细视图,而不是列表视图。我该怎么做呢。在这段代码中,我已重定向到列表视图

def student_detail(request, id):
    stud = Student.objects.get(id=id)
    context = {'stud':stud}
    
    return render(request, 'student/student_detail.html', context)
url.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'),
    

]
urlpatterns=[
路径('admission_form/',views.admission_form,name='admission form'),
路径('student/',views.student_list,name='student list'),
路径('student/',views.student_detail,name='student detail'),
]
form.save()将返回学生模型的实例。您可以在重定向中使用它的
id
,如下所示:

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)

它成功了,但我有一个愚蠢的问题。在这段代码中--id=instance.pk,pk是主键,但我不明白pk是如何工作的?为什么这里需要pk?在您的情况下,pk表示主键
id
pk
是一个很好的查询别名,因为主键可以是任何字段(如果您明确定义的话)。有关更多信息,请参阅此文档: