class AlumniSerializer(serializers.ModelSerializer): first_name = serializers.SerializerMethodField() last_name = serializers.SerializerMethodField() email = serializers.SerializerMethodField() college = CollegeSerializer(read_only=True) major = MajorSerializer(read_only=True) company = CompanyBasicsSerializer(read_only=True) country = CountrySerializer(read_only=True) state = StateSerializer(read_only=True) job_position = JobPositionSerializer(read_only=True) def get_first_name(self, obj): return obj.user.first_name def get_last_name(self, obj): return obj.user.last_name def get_email(self, obj): return obj.user.email class Meta: model = Profile fields = ('id', 'first_name', 'last_name', 'email', 'college', 'major', 'company', 'country', 'state', 'job_position', 'profile_photo_social', 'profile_photo_custom', 'grad_year')
class ProfileSerializer(serializers.ModelSerializer): user = UserSerializer(read_only=True) emp_status = EmploymentStatusSerializer(read_only=True) college = CollegeSerializer(read_only=True) major = MajorSerializer(read_only=True) company = CompanyBasicsSerializer(read_only=True) country = CountrySerializer(read_only=True) state = StateSerializer(read_only=True) job_position = JobPositionSerializer(read_only=True) dob = serializers.DateField(format="%Y-%m-%d") is_google_linked = serializers.SerializerMethodField() is_linkedin_linked = serializers.SerializerMethodField() def get_is_google_linked(self, obj): if obj.social_auth.filter(provider='google-oauth2').count() == 0: return False return True def get_is_linkedin_linked(self, obj): if obj.social_auth.filter(provider='linkedin-oauth2').count() == 0: return False return True class Meta: model = User exclude = [ 'password', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'is_demo', 'activation_key', 'key_expires', 'forgot_password_key', 'forgot_password_key_expires', 'approved', 'groups', 'user_permissions' ]
class AlumniSerializer(serializers.ModelSerializer): college = CollegeSerializer(read_only=True) major = MajorSerializer(read_only=True) company = CompanyBasicsSerializer(read_only=True) country = CountrySerializer(read_only=True) state = StateSerializer(read_only=True) job_position = JobPositionSerializer(read_only=True) class Meta: model = get_user_model() fields = ( 'id', 'first_name', 'last_name', 'email', 'college', 'major', 'company', 'country', 'state', 'job_position', 'profile_photo', 'grad_year')
def majors(request): user_profile = Profile.objects.get(user=request.user) if user_profile.user_type < int(Profile.UserTypes.student): return JsonResponse(create_response( data=None, success=False, error_code=ResponseCodes.not_supported_user), safe=False) college = College.objects.get(pk=user_profile.college.pk) alumni = Profile.objects.filter(~Q(major=None), college=college) data = [] for a in alumni: if a.major is not None: data.append(a.major) data = set(data) serialized_majors = MajorSerializer( instance=data, many=True, ).data return JsonResponse(create_response(data=serialized_majors), safe=False)
class AlumniSerializer(serializers.ModelSerializer): college = CollegeSerializer(read_only=True) major = MajorSerializer(read_only=True) company = CompanyBasicsSerializer(read_only=True) country = CountrySerializer(read_only=True) state = StateSerializer(read_only=True) job_position = JobPositionSerializer(read_only=True) email = serializers.SerializerMethodField() def get_email(self, obj): if obj.is_email_public: return obj.email else: return None class Meta: model = get_user_model() fields = ('id', 'first_name', 'last_name', 'email', 'college', 'major', 'company', 'country', 'state', 'job_position', 'profile_photo', 'grad_year')
class UserSerializer(serializers.ModelSerializer): """Serializer with current match.""" net_id = serializers.CharField(source="person.net_id") majors = MajorSerializer(source="person.majors", many=True) hometown = serializers.CharField(source="person.hometown") profile_pic_url = serializers.CharField(source="person.profile_pic_url") facebook_url = serializers.CharField(source="person.facebook_url") instagram_username = serializers.CharField( source="person.instagram_username") graduation_year = serializers.CharField(source="person.graduation_year") pronouns = serializers.CharField(source="person.pronouns") purposes = PurposeSerializer(source="person.purposes", many=True) availability = SerializerMethodField("get_availability") locations = LocationSerializer(source="person.locations", many=True) interests = InterestSerializer(source="person.interests", many=True) groups = GroupSerializer(source="person.groups", many=True) prompts = SerializerMethodField("get_prompts") has_onboarded = serializers.BooleanField(source="person.has_onboarded") pending_feedback = serializers.BooleanField( source="person.pending_feedback") current_match = serializers.SerializerMethodField("get_current_match") deleted = serializers.BooleanField(source="person.soft_deleted") blocked_users = SerializerMethodField("get_blocked_users") is_paused = serializers.BooleanField(source="person.is_paused") pause_expiration = serializers.DateTimeField( source="person.pause_expiration") last_active = serializers.DateTimeField(source="person.last_active") def get_availability(self, user): if user.person.availability is None: return [] availability = json.loads(user.person.availability) return availability def get_current_match(self, user): blocked_ids = user.person.blocked_users.values_list("id", flat=True) matches = Match.objects.filter(Q(user_1=user) | Q( user_2=user)).order_by("-created_date") if (len(matches) == 0 or matches[0].user_1.id in blocked_ids or matches[0].user_2.id in blocked_ids): return None return MatchSerializer(matches.first(), user=user).data def get_prompts(self, user): prompt_questions = user.person.prompt_questions.all() prompt_answers = user.person.prompt_answers if prompt_answers is None: return [] prompt_answers = json.loads(prompt_answers) prompts = [] for question_index in range(len(prompt_questions)): prompts.append({ "id": prompt_questions[question_index].id, "question_name": prompt_questions[question_index].question_name, "question_placeholder": prompt_questions[question_index].question_placeholder, "answer": prompt_answers[question_index], }) return prompts def get_blocked_users(self, user): return map(lambda u: u.id, user.person.blocked_users.all()) class Meta: model = User fields = ( "id", "net_id", "first_name", "last_name", "majors", "hometown", "profile_pic_url", "facebook_url", "instagram_username", "graduation_year", "pronouns", "purposes", "availability", "locations", "interests", "groups", "prompts", "has_onboarded", "deleted", "pending_feedback", "current_match", "blocked_users", "is_paused", "pause_expiration", "last_active", ) read_only_fields = fields
class SimpleUserSerializer(serializers.ModelSerializer): """Serializer for all users view.""" net_id = serializers.CharField(source="person.net_id") profile_pic_url = serializers.CharField(source="person.profile_pic_url") majors = MajorSerializer(source="person.majors", many=True) hometown = serializers.CharField(source="person.hometown") graduation_year = serializers.CharField(source="person.graduation_year") pronouns = serializers.CharField(source="person.pronouns") interests = InterestSerializer(source="person.interests", many=True) groups = GroupSerializer(source="person.groups", many=True) prompts = serializers.SerializerMethodField("get_prompts") pending_feedback = serializers.BooleanField(source="person.pending_feedback") is_blocked = serializers.SerializerMethodField("get_blocked") def get_blocked(self, user): request_user = self.context.get("request_user") if request_user is not None and hasattr(request_user, "person"): return user.id in request_user.person.blocked_users.values_list( "id", flat=True ) return None def get_prompts(self, user): prompt_questions = user.person.prompt_questions.all() prompt_answers = user.person.prompt_answers if prompt_answers is None: return [] prompt_answers = json.loads(prompt_answers) prompts = [] for question_index in range(len(prompt_questions)): prompts.append( { "id": prompt_questions[question_index].id, "question_name": prompt_questions[question_index].question_name, "question_placeholder": prompt_questions[ question_index ].question_placeholder, "answer": prompt_answers[question_index], } ) return prompts class Meta: model = User fields = ( "id", "net_id", "first_name", "last_name", "profile_pic_url", "majors", "hometown", "graduation_year", "pronouns", "interests", "groups", "prompts", "pending_feedback", "is_blocked", ) read_only_fields = fields