from django.contrib.auth import get_user_model from rest_framework import serializers from access.models.other import Account from access.models.progress import ProgressLesson from access.models import Progress from achievements.serialers import DiplomaSerializer, AchievementsSerializer class ProgressLessonSerializer(serializers.ModelSerializer): teacher = serializers.SerializerMethodField() class Meta: model = ProgressLesson exclude = ('id', 'progress') @staticmethod def get_teacher(self): return self.teacher.get_full_name() class ProgressSerializer(serializers.ModelSerializer): lessons = serializers.SerializerMethodField() class Meta: model = Progress fields = ('lessons', 'course_token') @staticmethod def get_lessons(self): return [ProgressLessonSerializer(i).data for i in self.progresslesson_set.all()] 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.achievement_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 None if self.account.phone is None else self.account.phone.raw_input @staticmethod def get_pay(self): return sum([i.get_full_price() for i in self.bill_user.all()])