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
, а не f
, поэтому вам следует либо обновить orm_filepath(…)
, либо ссылку в шаблоне.