class LessonSerializer(WritableNestedModelSerializer): subject = LessonSubjectSerializer() milgroup = MilgroupSerializer() class Meta: model = Lesson fields = '__all__'
def get(self, request: Request) -> Response: query_params = AbsenceJournalQuerySerializer(data=request.query_params) if not query_params.is_valid(): return Response(query_params.errors, status=HTTP_400_BAD_REQUEST) # final json data = {} # add milgroup data milgroup = MilgroupSerializer( Milgroup.objects.get( milgroup=request.query_params['milgroup'])).data data['milgroup'] = milgroup # calculate dates date_from = datetime.fromisoformat(query_params.data['date_from']) date_to = datetime.fromisoformat(query_params.data['date_to']) date_range = get_date_range(date_from, date_to, milgroup['weekday']) # add dates and absences data['dates'] = date_range data['students'] = AbsenceJournalSerializer( Student.objects.filter( milgroup__milgroup=request.query_params['milgroup']), context={ 'request': request, 'date_range': date_range, }, many=True).data return Response(data, status=HTTP_200_OK)
class LessonSerializer(WritableNestedModelSerializer): subject = LessonSubjectSerializer( required=False, validators=[PresentInDatabaseValidator(Subject)]) milgroup = MilgroupSerializer( required=False, validators=[PresentInDatabaseValidator(Milgroup)]) class Meta: model = Lesson fields = '__all__'
class TeacherSerializer(WritableNestedModelSerializer): fullname = SerializerMethodField(required=False) milgroup = MilgroupSerializer() def get_fullname(self, obj): return f'{obj.surname} {obj.name} {obj.patronymic}' class Meta: model = Teacher fields = '__all__'
class StudentShortSerializer(ModelSerializer): fullname = SerializerMethodField(required=False) milgroup = MilgroupSerializer(required=False) def get_fullname(self, obj): return f"{obj.surname} {obj.name} {obj.patronymic}" class Meta: model = Student fields = ["id", "fullname", "milgroup"]
class TeacherShortSerializer(WritableNestedModelSerializer): id = IntegerField(required=False) fullname = SerializerMethodField(required=False) milgroup = MilgroupSerializer( required=False, many=False, validators=[PresentInDatabaseValidator(Milgroup)]) def get_fullname(self, obj): return f'{obj.surname} {obj.name} {obj.patronymic}' class Meta: model = Teacher fields = ['id', 'fullname', 'milgroup']
class StudentSerializer(WritableNestedModelSerializer): milgroup = MilgroupSerializer( required=False, validators=[PresentInDatabaseValidator(Milgroup)]) program = ProgramSerializer( required=False, validators=[PresentInDatabaseValidator(Program)]) fullname = SerializerMethodField(required=False) class Meta: model = Student fields = '__all__' def get_fullname(self, obj): return f'{obj.surname} {obj.name} {obj.patronymic}'
class StudentSerializer(WritableNestedModelSerializer): milgroup = MilgroupSerializer() university_info = UniversityInfoSerializer() photo = PhotoSerializer(read_only=True) birth_info = BirthInfoSerializer(read_only=True) application_process = ApplicationProcessSerializer(read_only=False) student_skills = StudentSkillSerializer(many=True) fullname = SerializerMethodField() class Meta: model = Student fields = "__all__" def get_fullname(self, obj): return f"{obj.surname} {obj.name} {obj.patronymic}"
def get(self, request: Request) -> Response: query_params = MarkJournalQuerySerializer(data=request.query_params) if not query_params.is_valid(): return Response(query_params.errors, status=HTTP_400_BAD_REQUEST) # final json data = {} # add milgroup data milgroup = MilgroupSerializer( Milgroup.objects.get( milgroup=request.query_params['milgroup'])).data data['milgroup'] = milgroup subject_query = Subject.objects.get(id=request.query_params['subject']) subject = LessonSubjectSerializer(subject_query).data data['subject'] = subject # calculate dates date_from = datetime.fromisoformat(query_params.data['date_from']) date_to = datetime.fromisoformat(query_params.data['date_to']) # date_range = get_date_range(date_from, date_to, milgroup['weekday']) lessons = Lesson.objects.filter( date__lte=date_to, date__gte=date_from, milgroup=request.query_params['milgroup'], subject=request.query_params['subject']).order_by( 'date', 'ordinal') data['lessons'] = LessonSerializer(lessons, many=True).data date_range = list({item.date for item in lessons}) # add dates and absences data['dates'] = sorted(date_range) data['students'] = MarkJournalSerializer(Student.objects.filter( milgroup__milgroup=request.query_params['milgroup']), context={ 'request': request, 'date_range': date_range, 'subject': subject_query.id }, many=True).data return Response(data, status=HTTP_200_OK)
def get(self, request: Request) -> Response: query_params = LessonJournalGetQuerySerializer( data=request.query_params) if not query_params.is_valid(): return Response(query_params.errors, status=HTTP_400_BAD_REQUEST) # final json data = {} # add milgroup data milgroup = MilgroupSerializer( Milgroup.objects.get( milgroup=request.query_params['milgroup'])).data data['milgroup'] = milgroup # calculate dates date_from = datetime.fromisoformat((query_params.data['date_from'])) date_to = datetime.fromisoformat((query_params.data['date_to'])) date_range = get_date_range(date_from, date_to, milgroup['weekday']) data['dates'] = date_range # sort lessons by date and milgroup lessons_filtered = Lesson.objects.filter( milgroup=request.query_params['milgroup'], date__gte=request.query_params['date_from'], date__lte=request.query_params['date_to']) # ordinals ordinals = [] for ordinal in range(1, 11): lessons = dict() lessons['ordinal'] = ordinal lessons['lessons'] = LessonSerializer( lessons_filtered.filter(ordinal=ordinal), many=True).data ordinals.append(lessons) data['ordinals'] = ordinals return Response(data, status=HTTP_200_OK)