【发布时间】:2022-08-03 14:26:52
【问题描述】:
请我希望任何人帮助我,尝试从讲师会话中对这个学生结果进行分组,以便讲师可以根据提交的课程学生查看每个学生我已经成功获得了一个列表,但该列表没有按学生 ID 分组
这是讲师请求的视图
class LecturerListOfStudentResult(View):
def get(self, request, *args, **kwargs):
lecturer = Lecturers.objects.get(admin=request.user.id)
result = LecturerCourse.objects.filter(lecturer=lecturer)
context = {
\'question\':result,
}
return render(request, \'superadmin/lecturer/list-result-
student.html\', context)
这是所有提交的学生结果视图的列表
class ListAllSubmittedAnswerByCourseRegister(View):
def get(self, request, *args, **kwargs):
lecturer = Lecturers.objects.get(admin=request.user.id)
result = StudentSubmittedAnswer.objects.filter(lecturer=lecturer,
student=int(kwargs[\'id\']))
context = {\'question\':result}
return render(request, \'superadmin/lecturer/list-all-result-
student.html\', context)
这是我只得到计数记录的列表的详细视图
class LecturerListOfStudentResultDetail(View):
def get(self, request, *args, **kwargs):
student = Students.objects.get(admin=int(kwargs[\'id\']))
result = StudentSubmittedAnswer.objects.filter(student=student)
skipped = StudentSubmittedAnswer.objects.filter(student=student,
right_answer=\'Not Submitted\').count()
attempted = StudentSubmittedAnswer.objects.filter
(student=student).exclude(right_answer=\'Not Submitted\').count()
rightAns=0
percentage=0
for row in result:
if row.question.right_opt == row.right_answer:
rightAns+=1
if len(result) > 0:
percentage=(rightAns*100)/result.count()
return render(request, \'superadmin/lecturer/view-result-
detail.html\', {\'result\': result,\'total_skipped\':
skipped,\'attempted\': attempted, \'rightAns\': rightAns,
\'percentage\':percentage})
这是我的 url.py
path(\'lecturer/course/registration\',
LecturerCourseRegistration.as_view(), name=\"lecturer-course-
registration\"),
path(\'list/lecturer/course/registration\',
ListLecturerCourseRegistration.as_view(), name=\"list-lecturer-
course-registration\"),
path(\'list/submitted/course/answer/student/<int:id>/\',
ListAllSubmittedAnswerByCourseRegister.as_view(), name=\"list-all-
submitted-course-question-by-student\"),
这是学生 html 的列表
{% for r in question %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ r.course.name }}</td>
<td>{{ r.created_at }}</td>
<td><a href=\"{% url \'emisapp:list-all-submitted-course-
question-by-student\' r.lecturer.admin.id %}\">View</a></td>
{% endfor %}
这是循环为每个学生提交的所有考试的 html 视图
{% for row in result %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ row.course.name }}</td>
<td>{{ row.question.question }}</td>
<td>{{ row.question.right_opt }}</td>
{% if row.question.right_opt == row.right_answer %}
<td class=\"bg-success text-white\">{{ row.right_answer }}</td>
{% else %}
<td class=\"bg-danger text-white\">{{ row.right_answer }}</td>
{% endif %}
</tr>
{% endfor %}
模型.py
class StudentSubmittedAnswer(models.Model):
id = models.AutoField(primary_key=True)
course = models.ForeignKey(Courses)
lecturer = models.ForeignKey(Lecturers)
question = models.ForeignKey(QuizQuestion)
student = models.ForeignKey(Students)
right_answer = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True, null=True)
这是我添加的 Models.py
class StudentSubmittedAnswer(models.Model):
id = models.AutoField(primary_key=True)
lecturercourse = models.ForeignKey(LecturerCourse, null=True,
related_name=\'studentsubmittedanswer\', on_delete=models.CASCADE)
lecturer = models.ForeignKey(Lecturers, null=True,
related_name=\'studentsubmittedanswer\', on_delete=models.CASCADE)
question = models.ForeignKey(QuizQuestion,
related_name=\'studentsubmittedanswer\', on_delete=models.CASCADE)
student = models.ForeignKey(Students,
related_name=\'studentsubmittedanswer\', null=True,
on_delete=models.CASCADE)
right_answer = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True, null=True)