示例#1
0
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')
示例#2
0
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'
        ]
示例#3
0
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')
示例#4
0
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)
示例#5
0
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