def perform_get_object(self): try: homework_id = self.request.query_params['homework'] except KeyError: raise ValidationError() teacher_id = get_jwt_request_uid(self.request) try: homework: Homework = Homework.objects.filter( course__teacher__id=teacher_id).get(pk=homework_id) except Homework.DoesNotExist: raise PermissionDenied() return homework.submits.filter(reviewed=False).first()
def _validate(self, attrs): available_since: datetime = attrs['available_since'] deadline: datetime = attrs['deadline'] if available_since > deadline: raise ValidationError('可用时间不能晚于截止日期!') total_score: float = attrs['total_score'] if total_score < 0.0: raise ValidationError('作业满分不能为负数!') course: Course = attrs['course'] teacher_id = get_jwt_request_uid(self.context['request']) if course.teacher.id != teacher_id: raise ValidationError('作业的课程不是当前用户开设的课程!') return attrs
def answer(self, request: Request, pk=None): homework: Homework = self.get_object() if homework.answer is None: raise NotFound('教师未提供答案!') now = timezone.now() if now <= homework.deadline: raise PermissionDenied() student_id = get_jwt_request_uid(request) if HomeworkSubmit.objects.filter(homework=homework, author_id=student_id).exists(): response = StreamingHttpResponse(homework.answer.file, content_type=homework.answer.mime) response['Content-Disposition'] = f'attachment; filename={homework.answer.filename}' return response else: raise PermissionDenied()
def get_queryset(self): teacher_id = get_jwt_request_uid(self.request) return HomeworkSubmit.objects.filter( homework__course__teacher__id=teacher_id)
def teacher_homeworks(request: Request): teacher_id = get_jwt_request_uid(request) return Homework.objects.filter(course__teacher__id=teacher_id)
def get_queryset(self): student_id = get_jwt_request_uid(self.request) return Homework.objects.filter(course__students__id=student_id)