from django.contrib.auth import get_user_model from rest_framework import serializers from access.models import ExtraPrivilege, Account, Progress from courses.serializers import MiniVertexSerializer class ProgressSerializer(serializers.ModelSerializer): vertex = serializers.SerializerMethodField() course = serializers.SerializerMethodField() max = serializers.SerializerMethodField() number = serializers.SerializerMethodField() class Meta: model = Progress fields = ('course', 'vertex', 'number', 'max') @staticmethod def get_max(self): return self.course.get_vertexes('topic').count() @staticmethod def get_number(self): if self.success: return self.get_max() return self.active_obj.get_number('topic') @staticmethod def get_course(self): return {'title': self.course.title, 'slug': self.course.slug} @staticmethod def get_vertex(self): return MiniVertexSerializer(self.active_obj).data 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 UserInitSerializer(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 UserProfileSerializer(serializers.ModelSerializer): account = serializers.SerializerMethodField() groups = serializers.SerializerMethodField() progress = serializers.SerializerMethodField() class Meta: model = get_user_model() fields = ( 'id', 'email', 'first_name', 'last_name','progress', 'account', 'groups', 'is_staff', 'is_superuser', ) @staticmethod def get_progress(self): return [ProgressSerializer(i).data for i in self.progress_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()] 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()]) class ExtraPrivilegeSerializer(serializers.ModelSerializer): class Meta: model = ExtraPrivilege exclude = ('user', )