尝试反向使用模型表单的URL时出现NoReverseMatch错误

时间:2018-06-24 18:00:03

标签: django django-models django-forms django-urls

我认为该错误与Django 2.0中的网址格式更改有关。 我在Google上发现的几乎所有内容都使用旧的网址格式,因此它们没有帮助。

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

我的网址:

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]+)/$']

然后,我直接去列出,编号为11的项目就在这里,我单击它,它就打开了,没有任何问题

详细模式:

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

1 个答案:

答案 0 :(得分:0)

您的详细UR​​L模式需要一个album_id参数,但是您正在传递它pk。更正您的方法:

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

或更改网址格式:

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

(但不要两者都做)。