【问题标题】:NoReverseMatch error while trying to reverse url with Model Forms尝试使用模型表单反转 url 时出现 NoReverseMatch 错误
【发布时间】:2018-12-03 09:16:11
【问题描述】:

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

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

然后,我直接进入列表,id为11的项目就在那里,我点击它,它打开没有任何问题

详细图案:

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

【问题讨论】:

  • 由于问题出在“详细”URL,您实际上需要显示该 URL 模式。
  • path('/', views.detail, name='detail'),也编辑到问题中。谢谢

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


【解决方案1】:

您的详细 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')

(但不要两者都做)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2020-09-19
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多