diff --git a/web_admin/serializers/user_management_serializer.py b/web_admin/serializers/user_management_serializer.py index 9333155..4bb0709 100644 --- a/web_admin/serializers/user_management_serializer.py +++ b/web_admin/serializers/user_management_serializer.py @@ -97,14 +97,18 @@ class GuardianSerializer(serializers.ModelSerializer): guardian serializer """ name = serializers.SerializerMethodField() - email = serializers.CharField(required=False) + first_name = serializers.SerializerMethodField() + last_name = serializers.SerializerMethodField() + username = serializers.SerializerMethodField() + email = serializers.EmailField(required=False) class Meta: """ meta class """ model = Guardian - fields = ('id', 'name', 'dob', 'gender', 'country_code', 'phone', 'is_active', 'country_name', 'image', 'email') + fields = ('id', 'name', 'first_name', 'last_name', 'username', 'dob', 'gender', 'country_code', 'phone', + 'is_active', 'country_name', 'image', 'email') def validate(self, attrs): """ @@ -137,25 +141,53 @@ class GuardianSerializer(serializers.ModelSerializer): @staticmethod def get_name(obj): """ - :param obj: user object + :param obj: guardian object :return: full name """ return f"{obj.user.first_name} {obj.user.last_name}" if obj.user.last_name else obj.user.first_name + @staticmethod + def get_first_name(obj): + """ + :param obj: guardian object + :return: first name + """ + return obj.user.first_name + + @staticmethod + def get_last_name(obj): + """ + :param obj: guardian object + :return: last name + """ + return obj.user.last_name + + @staticmethod + def get_username(obj): + """ + :param obj: guardian object + :return: email + """ + return obj.user.username + class JuniorSerializer(serializers.ModelSerializer): """ junior serializer """ name = serializers.SerializerMethodField() - email = serializers.CharField(required=False) + first_name = serializers.SerializerMethodField() + last_name = serializers.SerializerMethodField() + username = serializers.SerializerMethodField() + email = serializers.EmailField(required=False) class Meta: """ meta class """ model = Junior - fields = ('id', 'name', 'dob', 'gender', 'country_code', 'phone', 'is_active', 'country_name', 'image', 'email') + fields = ('id', 'name', 'first_name', 'last_name', 'username', 'dob', 'gender', 'country_code', 'phone', + 'is_active', 'country_name', 'image', 'email') def validate(self, attrs): """ @@ -187,11 +219,35 @@ class JuniorSerializer(serializers.ModelSerializer): @staticmethod def get_name(obj): """ - :param obj: user object + :param obj: junior object :return: full name """ return f"{obj.auth.first_name} {obj.auth.last_name}" if obj.auth.last_name else obj.auth.first_name + @staticmethod + def get_first_name(obj): + """ + :param obj: junior object + :return: first name + """ + return obj.auth.first_name + + @staticmethod + def get_last_name(obj): + """ + :param obj: junior object + :return: last name + """ + return obj.auth.last_name + + @staticmethod + def get_username(obj): + """ + :param obj: junior object + :return: email + """ + return obj.auth.username + class UserManagementDetailSerializer(serializers.ModelSerializer): """ @@ -229,10 +285,14 @@ class UserManagementDetailSerializer(serializers.ModelSerializer): :return: associated user """ if profile := obj.guardian_profile.all().first(): - junior = Junior.objects.filter(guardian_code__contains=[profile.guardian_code], is_verified=True) - serializer = JuniorSerializer(junior, many=True) - return serializer.data + if profile.guardian_code: + junior = Junior.objects.filter(guardian_code__contains=[profile.guardian_code], is_verified=True) + serializer = JuniorSerializer(junior, many=True) + return serializer.data elif profile := obj.junior_profile.all().first(): - guardian = Guardian.objects.filter(guardian_code__in=profile.guardian_code, is_verified=True) - serializer = GuardianSerializer(guardian, many=True) - return serializer.data + if profile.guardian_code: + guardian = Guardian.objects.filter(guardian_code__in=profile.guardian_code, is_verified=True) + serializer = GuardianSerializer(guardian, many=True) + return serializer.data + else: + return None