Templateview в django выдает ошибку "Field 'id' expected a number but gets 'form_file' "

Это мой файл view.py

class UploadTemplateView(TemplateView):
    template_name = 'reports/from_file.html'

Это мой файл urls.py

urlpatterns = [
    path('save/', create_report_view, name='create-report'),
    path('', ReportListView.as_view(), name='main'),
    path('from_file/', UploadTemplateView.as_view(), name='form-file'),
    path('<pk>/', ReportDetailView.as_view(), name='detail'),
    path('upload/', csv_upload_view, name='upload'),
    path('<pk>/pdf/', render_pdf_view, name='pdf'),
    
]

Когда я пытаюсь зайти на свою страницу, выдает ошибку "Поле 'id' ожидало число, но получило 'form_file'". Единственный способ исправить это - изменить имя пути на число. Как я могу определить имя пути как строку

Если вы не укажете тип конвертера пути, Django предположит, что вы имели в виду <str:…, поэтому <pk> будет соответствовать всем строкам, а не только числовым.

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

urlpatterns = [
    path('save/', create_report_view, name='create-report'),
    path('', ReportListView.as_view(), name='main'),
    path('from_file/', UploadTemplateView.as_view(), name='form-file'),
    path('upload/', csv_upload_view, name='upload'),
    path('<int:pk>/', ReportDetailView.as_view(), name='detail'),
    path('<int:pk>/pdf/', render_pdf_view, name='pdf'),
    
]

В вашем шаблоне вы также допустили ошибку в URL: это from_file, а не form_file, поэтому вам следует либо обновить path(…), либо ссылку в шаблоне.

Вернуться на верх