from django.contrib.auth import get_user_model from rest_framework import serializers from access.models.other import Account, Progress from achievements.serialers import DiplomaSerializer, AchievementsSerializer from course_service.courses.serializers import MiniVertexSerializer, CourseInitSerializer class ProgressSerializer(serializers.ModelSerializer): max = serializers.SerializerMethodField() number = serializers.SerializerMethodField() in_progress = serializers.SerializerMethodField() course = serializers.SerializerMethodField() class Meta: model = Progress fields = ('in_progress', 'number', 'max', 'progress_list', 'course') @staticmethod def get_max(self): return self.course.get_vertexes('topic').count() @staticmethod def get_course(self): return CourseInitSerializer(self.course).data @staticmethod def get_in_progress(self): if self.is_finish(): return [] else: return [MiniVertexSerializer(i).data for i in self.get_objects_in_progress()] @staticmethod def get_number(self): if self.is_finish(): return self.course.get_vertexes('topic').count() return self.progress_list.filter(content_type__model="topic").count() class AccountSerializer(serializers.ModelSerializer): gender = serializers.SerializerMethodField() class Meta: model = Account exclude = ('owner', 'id',) @staticmethod def get_gender(self): return self.get_gender_display() class UserSelfSerializer(serializers.ModelSerializer): account = serializers.SerializerMethodField() groups = serializers.SerializerMethodField() progress = serializers.SerializerMethodField() diplomas = serializers.SerializerMethodField() achievements = serializers.SerializerMethodField() class Meta: model = get_user_model() fields = ('id', 'email', 'first_name', 'last_name', 'progress', 'achievements', 'account', 'groups', 'is_staff', 'is_superuser', 'diplomas', 'is_active') @staticmethod def get_diplomas(self): return [DiplomaSerializer(i).data for i in self.diploma_set.all()] @staticmethod def get_achievements(self): return [AchievementsSerializer(i).data for i in self.achievements_set.all()] @staticmethod def get_account(self): return AccountSerializer(self.account).data @staticmethod def get_groups(self): return [group.name for group in self.groups.all()] @staticmethod def get_progress(self): return [ProgressSerializer(i).data for i in self.progress_set.all()] class UserProfileSerializer(serializers.ModelSerializer): account = serializers.SerializerMethodField() groups = serializers.SerializerMethodField() class Meta: model = get_user_model() fields = ( 'id', 'email', 'first_name', 'last_name', 'account', 'groups', 'is_staff', 'is_superuser', ) @staticmethod def get_account(self): return AccountSerializer(self.account).data @staticmethod def get_groups(self): return [group.name for group in self.groups.all()] class UserSearchSerializer(serializers.ModelSerializer): pay = serializers.SerializerMethodField() phone = serializers.SerializerMethodField() class Meta: model = get_user_model() fields = ('id', 'email', 'first_name', 'last_name', 'phone', 'pay') @staticmethod def get_phone(self): return self.account.phone @staticmethod def get_pay(self): return sum([i.get_full_price() for i in self.bill_user.all()])