Получение ValueError при создании моего Django CreateView
Я пытаюсь вывести свое общее представление create для django и не могу этого сделать, так как получаю ошибку "ValueError at /teacher/add/" "Field 'id' expected a number but got 'add'." Я не уверен, в чем здесь может быть проблема.
models.py
from django.db import models
from django.urls import reverse
# Create your models here.
DEPARTMENT_CHOICES = [
('Social Studies', 'Social Studies'),
('Math', 'Math'),
('Science', 'Science'),
]
class Department(models.Model):
name = models.CharField(choices=DEPARTMENT_CHOICES, max_length=300)
def __str__(self):
return self.name
class Teacher(models.Model):
name = models.CharField(max_length=300)
# delete dept == delete teacher
department = models.ForeignKey(Department, on_delete=models.CASCADE)
tenure = models.BooleanField()
def __str__(self):
return f'{self.name} teaches {self.department}'
# dont need success url if get_absolute_url on create and update view
def get_absolute_url(self):
return reverse('teacher-detail', kwargs={'pk': self.pk})
urls.py
urlpatterns = [
path('teacher/add/', TeacherCreateView.as_view(), name='teacher-add'),
]
views.py
class TeacherCreateView(CreateView):
model = Teacher
fields = ['name']
Скорее всего, у вас есть другой шаблон URL перед шаблоном TeacherCreateView
, который захватывает add
, и, таким образом, запускает другое представление. Например, это может выглядеть так:
urlpatterns = [
path('teacher/<pk>/', TeacherDetailView.as_view(), name='teacher'),
# …,
path('teacher/add/', TeacherCreateView.as_view(), name='teacher-add'),
# …
]
в результате <pk>
перехватит add
и вместо него запустит DetailView
. Вам следует сделать pk
более ограничительным и работать с преобразователем пути <int:…>
:
urlpatterns = [
path('teacher/<int:pk>/', TeacherDetailView.as_view(), name='teacher'),
# …
path('teacher/add/', TeacherCreateView.as_view(), name='teacher-add'),
# …
]