获取ValueError渲染我的Django CreateView



我试图为django呈现我的通用创建视图,我不能这样做,因为我得到错误"ValueError在/teacher/add/"字段'id'期望得到一个数字,但得到'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']

在捕获addTeacherCreateView之前可能有另一个URL模式,因此将触发不同的视图。例如,这可能看起来像:

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'),
# …
]

最新更新