При получении поля 'None' ожидалось число, но получено 'update'. при использовании UpdateView в 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'),

Я хотел бы использовать слово "post" в URL, потому что я также использую его в других URL и они работают просто отлично (за исключением delete view, который дает мне ту же ошибку). Есть ли способ исправить эту ошибку без изменения URL?

Примечание: Это работало и раньше, но в какой-то момент сломалось, когда я пытался использовать django-PWA. Я не уверен, связано ли это с этим.

Спасибо за помощь!

Скорее всего, это связано с тем, что у вас есть другой путь, например:

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

или что-то подобное. Возможно, что один или оба update/ являются параметрами URL.

Если вы, например, посетите post/update/update, и ваш PostUpdateView будет определен первым, то это вызовет представление с pk='update'.

Если первичный ключ - просто число, вы можете использовать конвертер путей <int:…> для предотвращения срабатывания представления, когда pk представляет собой нечто иное, чем последовательность цифр:

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

EDIT: Основываясь на вашем комментарии, перед этим был другой вид с:

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

Если таким образом посетить post/123/update, то это вызовет FilteredPostListView с 123 в качестве year, а update в качестве месяца, и, следовательно, вызовет ошибку.

Вы можете поместить путь ниже пути ProductUpdateListView, и вы также можете использовать <int:…>, чтобы вызвать представление только тогда, когда оба параметра являются последовательностями цифр:

path('post/<int:year>/<int:month>/', FilteredPostListView.as_view(), name='filtered_post')
Вернуться на верх