from django.contrib.auth import get_user_model from rest_framework import serializers from rest_framework.generics import get_object_or_404 from access.models.other import Account from achievements.serialers import DiplomaSerializer, AchievementsSerializer from progress.serializers import ProgressSerializer 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 = ('out_key', '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 = ( 'out_key', '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() photo = serializers.SerializerMethodField() last_request = serializers.SerializerMethodField() class Meta: model = get_user_model() fields = ('photo', 'out_key', 'email', 'first_name', 'last_name', 'phone', 'pay', 'last_request') @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()]) @staticmethod def get_photo(self): try: url = self.account.photo.url except ValueError: url = None return url @staticmethod def get_last_request(self): return self.useractivity.last_request