/teacher/8/ 处的字段错误。无法将关键字 'teacher' 解析为字段。选项有:教室、教员、faculty_id、id、姓名
FieldError at /teacher/8/. Cannot resolve keyword 'teacher' into field. Choices are: classroom, faculty, faculty_id, id, name
当我试图显示我的视图时,我在我的 django 项目中遇到了错误。这个问题似乎与课程模型有关,但老实说我不知道从哪里开始。
我的老师模型:
class Teacher(models.Model):
GENDER_MALE = 0
GENDER_FEMALE = 1
GENDER_CHOICES = [(GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female')]
fname = models.TextField(max_length=20)
lname = models.TextField(max_length=20)
gender = models.IntegerField(choices=GENDER_CHOICES)
phone = models.IntegerField(default=None, blank=True, null=True)
email = models.TextField(max_length=30, default=None, blank=True, null=True)
faculty = models.ForeignKey('Faculty', on_delete=models.CASCADE )
def __str__(self):
return self.lname + ' ' + self.fname
我的课程模型:
class Course(models.Model):
name = models.TextField(max_length=50)
faculty = models.ForeignKey('Faculty', on_delete=models.CASCADE )
def __str__(self):
return f'{self.name}'
我的 Faculty 模型:
class Faculty(models.Model):
name = models.TextField(max_length=30)
def __str__(self):
return f'{self.name}'
我的看法:
def teacher(request, teacher_id):
teacher = get_object_or_404(Teacher, pk=teacher_id)
faculties = Faculty.objects.filter(teacher=teacher)
course = Course.objects.filter(teacher=teacher)
classrooms = Classroom.objects.filter(teacher=teacher)
students = Student.objects.filter(teacher=teacher)
# students = []
# for cls in classrooms:
# students.extend(Student.objects.filter(classroom=cls))
return render(request, 'polls/teacher.html', {'teacher': teacher,'faculties': faculties, 'courses':course,'classrooms':classrooms, 'students':students})
当我 运行 网站时,它指出我认为要停止的代码 course = Course.objects.filter(teacher=teacher)
我的模板:
{% extends "polls/base.html" %}
{% block body %}
<h2>{{ teacher.fname }} {{ teacher.lname }}</h2>
<h3>Faculty</h3>
{% if faculties %}
{% for faculty in faculties %}
<p><a href="{% url 'faculty' faculty.id %}">{{ faculty.name }}</a></p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Course</h3>
{%if courses %}
{% for course in courses %}
<p><a href="{% url 'course' course.id %}">{{ course.name }}</a> </p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Class</h3>
{% if classrooms %}
{% for class in classrooms %}
<p><a href="{% url 'classroom' class.id %}">{{ class.name }}</a> </p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Student</h3>
{% if students %}
{% for student in students %}
<p><a href="{% url 'student' student.id %}">{{ student.fname }} {{ student.lname }}</a></p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
{% endblock %}
发生这种情况是因为以下行:
course = Course.objects.filter(teacher=teacher)
Course
模型没有字段 teacher
,因此您无法按它进行过滤。要修复它,有两种选择:
向 Course
添加字段:
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
然后向每个已经存在的 Course
添加一个 Teacher
(或使其成为 null=True
)。
或者您可以通过教师所属的 Faculty
筛选 Course
,以获取所有拥有属于该教员的教师的课程:
courses = Course.objects.filter(faculty=teacher.faculty)
或者,使用 reverse foreign key lookup:
courses = teacher.faculty.course_set.all()
当我试图显示我的视图时,我在我的 django 项目中遇到了错误。这个问题似乎与课程模型有关,但老实说我不知道从哪里开始。
我的老师模型:
class Teacher(models.Model):
GENDER_MALE = 0
GENDER_FEMALE = 1
GENDER_CHOICES = [(GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female')]
fname = models.TextField(max_length=20)
lname = models.TextField(max_length=20)
gender = models.IntegerField(choices=GENDER_CHOICES)
phone = models.IntegerField(default=None, blank=True, null=True)
email = models.TextField(max_length=30, default=None, blank=True, null=True)
faculty = models.ForeignKey('Faculty', on_delete=models.CASCADE )
def __str__(self):
return self.lname + ' ' + self.fname
我的课程模型:
class Course(models.Model):
name = models.TextField(max_length=50)
faculty = models.ForeignKey('Faculty', on_delete=models.CASCADE )
def __str__(self):
return f'{self.name}'
我的 Faculty 模型:
class Faculty(models.Model):
name = models.TextField(max_length=30)
def __str__(self):
return f'{self.name}'
我的看法:
def teacher(request, teacher_id):
teacher = get_object_or_404(Teacher, pk=teacher_id)
faculties = Faculty.objects.filter(teacher=teacher)
course = Course.objects.filter(teacher=teacher)
classrooms = Classroom.objects.filter(teacher=teacher)
students = Student.objects.filter(teacher=teacher)
# students = []
# for cls in classrooms:
# students.extend(Student.objects.filter(classroom=cls))
return render(request, 'polls/teacher.html', {'teacher': teacher,'faculties': faculties, 'courses':course,'classrooms':classrooms, 'students':students})
当我 运行 网站时,它指出我认为要停止的代码 course = Course.objects.filter(teacher=teacher)
我的模板:
{% extends "polls/base.html" %}
{% block body %}
<h2>{{ teacher.fname }} {{ teacher.lname }}</h2>
<h3>Faculty</h3>
{% if faculties %}
{% for faculty in faculties %}
<p><a href="{% url 'faculty' faculty.id %}">{{ faculty.name }}</a></p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Course</h3>
{%if courses %}
{% for course in courses %}
<p><a href="{% url 'course' course.id %}">{{ course.name }}</a> </p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Class</h3>
{% if classrooms %}
{% for class in classrooms %}
<p><a href="{% url 'classroom' class.id %}">{{ class.name }}</a> </p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
<h3>Student</h3>
{% if students %}
{% for student in students %}
<p><a href="{% url 'student' student.id %}">{{ student.fname }} {{ student.lname }}</a></p>
{% endfor %}
{% else %}
<p> </p>
{% endif %}
{% endblock %}
发生这种情况是因为以下行:
course = Course.objects.filter(teacher=teacher)
Course
模型没有字段 teacher
,因此您无法按它进行过滤。要修复它,有两种选择:
向 Course
添加字段:
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
然后向每个已经存在的 Course
添加一个 Teacher
(或使其成为 null=True
)。
或者您可以通过教师所属的 Faculty
筛选 Course
,以获取所有拥有属于该教员的教师的课程:
courses = Course.objects.filter(faculty=teacher.faculty)
或者,使用 reverse foreign key lookup:
courses = teacher.faculty.course_set.all()