尝试使用模型表单反转 url 时出现 NoReverseMatch 错误

NoReverseMatch error while trying to reverse url with Model Forms

我认为该错误与 url django 2.0 中的模式更改有关。 我在 Google 上找到的几乎所有内容都使用旧的 url 模式,因此它们没有帮助。

...models
def get_absolute_url(self):
    return reverse('music:detail', kwargs={'pk':self.pk})

我的urls:

urlpatterns = [
    #music/add/
    path('add', views.AlbumCreate.as_view(), name="album-add")
    ]

这是表格,我不认为它有什么问题,因为当我自己填写表格并点击提交时,在列表页面上它显示它已经提交。

 <form action="", method="post">

错误本身:

NoReverseMatch at /music/add/
Reverse for 'detail' with keyword arguments **'{'pk': 11(id of the item i'm adding}'** not found.
1 pattern(s) tried: ['music/(?P<album_id>[0-9]+)/$']

然后我直接去list,id为11的item就在那里,点开,没有任何问题

详细模式:

path('<int:album_id>/', views.detail, name='detail')

您的详细信息 URL 模式需要一个 album_id 参数,但您正在传递它 pk。更正你的方法:

def get_absolute_url(self):
    return reverse('music:detail', kwargs={'album_id':self.pk})

或更改 URL 模式:

path('<int:pk>/', views.detail, name='detail')

(但不要两者都做)。