正在获取字段 'None' 需要一个数字,但得到了 'update'。在 Django 中使用 UpdateView 时

Getting Field 'None' expected a number but got 'update'. when using UpdateView in Django

我正在为我的更新页面使用 UpdateView,但出现此错误: 字段 'None' 需要一个数字,但得到了 'update'。

我的 urls.py 看起来像这样:

path('post/<pk>/update/', PostUpdateView.as_view(), name='post_update'),

如果我将更新 URL 更改为“post”以外的任何内容,一切正常。例如,这工作正常:

path('abcxyz/<pk>/update/', PostUpdateView.as_view(), name='post_update'),

我想在 URL 中使用单词“post”,因为我也在其他 URL 中使用它并且它们工作正常(删除视图除外,这给了我同样的错误)。有什么方法可以在不更改 URL 的情况下修复此错误?

注意:它以前工作过,但是当我尝试使用 django-PWA 时,它在某个时候坏了。不过我不确定这是否相关。

感谢您的帮助!

这可能是因为您有另一条路径,例如:

path('post/<strong>update/update/</strong>', PostUpdateView.as_view(), name='post_update'),

或类似的东西。一个或两个 update/ 是 URL 参数是可能的。

如果您然后例如访问 post/update/update,并且您的 PostUpdateView 是首先定义的,它将触发带有 pk='update' 的视图。

如果主键只是一个数字,您可以使用 <int:…> 路径转换器来防止在 pk 不是数字序列时触发视图:

path('post/<strong><int:</strong>pk<strong>></strong>/update/', PostUpdateView.as_view(), name='post_update'),

编辑:根据您的评论,在此之前还有另一种观点:

path('post/<strong><year></strong>/<strong><month></strong>/', FilteredPostListView.as_view(), name='filtered_post')

如果这样访问post/123/update,它会触发FilteredPostListView123yearupdate为月份,因此它会引发错误。

您可以将路径 放在 ProductUpdateListView 之下,并且您可能还想使用 <int:…> 来仅触发视图当两个参数都是数字序列时:

path('post/<strong><int:</strong>year<strong>></strong>/<strong><int:</strong>month<strong>></strong>/', FilteredPostListView.as_view(), name='filtered_post')