Django 2.1 - 为主键创建正确的路径 URL

Django 2.1 - creating the correct path URL for primary keys

我是 Django 的新手,我正在尝试创建一个学校数据库 webapp 作为培训练习。(使用 Django 2.1)

我设置了两个模型学校和学生。我的主页是数据库中所有学校的列表视图。这些学校中的每一个都是锚点参考,以显示学校详细信息和所有学校学生的列表。每个学校学生也是学生详细信息页面的锚点引用。

我遇到的错误是在我 url 页面上的路径上。

path('<int:pk>/<int:cpk>/',views.StudentDetailView.as_view(),name='student_details'),

这一行获取url输出我当前所在学校的主键和我选择的学生的主键。

当我单击学生姓名时,它会转到与学校具有相同主键的学生,因为 url 是 (basic_app/1/1/)。我如何让它从 url (ckp) 中的第二个数字中提取并显示该主键数据?

比如pk为1的学校有10个学生。在学校详细信息页面上,它列出了所有学生。当我点击学生 3 时,url 看起来像 basic_app/1/3/(基于上面的路径代码)但它只会显示学生 1 的详细信息。我必须按顺序编辑什么将其发送给合适的学生(views.py、models.py、urls.py、html 文件)?

如果我没理解错的话,你的问题基本上是当你访问 basic_app/1/3/ 时你想查看主键为 3 的学生的详细信息,但你看到的却是主键为 1 的学生。

如果是这样,那是因为在您看来您正在使用 URL 字段 pk,而您应该使用 cpk。尝试将 URL 模式更改为如下所示:

path('<int:school_pk>/<int:pk>/',views.StudentDetailView.as_view(),name='student_details'),

(如果这不起作用,请 post StudentDetailView 的代码。)

一般来说,我建议使用更具描述性的 URL 字段,例如school_pk, student_pk, ... 这样您就可以避免混淆。

改用这个 path("<int:pk>/",views.SchoolDetailView.as_view(),name='detail')

解决这个问题的方法有以下三种:

在urls.py

from django.urls import path

urlpatterns = [
    path('<int:pk>/',SchoolDetailView.as_view(), name='detail')
    
]

(或): 在 urls.py

from django.urls import re_path

urlpatterns = [
    re_path(r'^(?P<pk>[-\w]+)/$', SchoolDetailView.as_view(), name='detail')
]

(或):

在urls.py中:

from django.conf.urls import url

urlpatterns = [
    url(r'^(?P<pk>[-\w]+)/$', SchoolDetailView.as_view(), name='detail')
]