示例#1
0
class UserProfileSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
    user_username = serializers.ReadOnlyField(source='user.username',
                                              read_only=True)
    verified = serializers.ReadOnlyField()
    address = AddressSerializer()

    class Meta:
        model = models.UserProfile
        fields = ('user', 'user_username', 'gender', 'birthday', 'verified',
                  'address', 'nationality', 'picture', 'friends', 'roles',
                  'created_timestamp', 'languages', 'id')

    def create(self, **kwargs):
        address_data = self.validated_data.pop('address')
        address = models.Address.objects.create(**address_data)

        user_data = self.validated_data.pop('user')
        user = User.objects.get(id=user_data.id)
        user_profile = models.UserProfile.objects.create(address=address,
                                                         user=user,
                                                         **self.validated_data)
        return user_profile

    def update(self, **kwargs):
        address = self.instance.address
        address_data = self.validated_data.pop('address')

        address.city = address_data.get('city', address.city)
        address.country = address_data.get('country', address.country)
        address.street = address_data.get('street', address.street)

        address.save()

        self.instance.gender = self.validated_data.get('gender',
                                                       self.instance.gender)
        self.instance.birthday = self.validated_data.get(
            'birthday', self.instance.birthday)
        self.instance.verified = self.validated_data.get(
            'verified', self.instance.verified)
        self.instance.picture = self.validated_data.get(
            'picture', self.instance.picture)
        self.instance.save(address=address)
        return self.instance
示例#2
0
文件: user.py 项目: 9vinny/hcc-daemo
class UserProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer(fields=('first_name', 'last_name', 'email'))
    user_username = serializers.ReadOnlyField(source='user.username',
                                              read_only=True)
    birthday = serializers.DateTimeField(allow_null=True)
    address = AddressSerializer(allow_null=True, required=False)
    location = LocationSerializer(allow_null=True, required=False)
    is_verified = serializers.BooleanField(read_only=True)
    financial_accounts = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = models.UserProfile
        fields = ('user', 'user_username', 'gender', 'birthday', 'is_verified',
                  'address', 'nationality', 'picture', 'created_at', 'id',
                  'financial_accounts', 'ethnicity', 'job_title', 'income',
                  'education', 'location', 'unspecified_responses',
                  'purpose_of_use', 'is_worker', 'is_requester', 'handle')

    def create(self, **kwargs):
        address_data = self.validated_data.pop('address')
        address = models.Address.objects.create(**address_data)
        user_data = self.validated_data.pop('user')
        user_profile = models.UserProfile.objects.create(address=address,
                                                         user=user_data.id,
                                                         **self.validated_data)
        return user_profile

    def update(self, **kwargs):
        user = self.validated_data.pop('user')
        if self.validated_data.get('location') is not None:
            location_data = self.validated_data.pop('location')
            city_name = None
            country_name = None
            country_code = None
            state_name = ""
            state_code = ""
            street_name = None
            postal_code = ""

            if 'city' in location_data:
                city_name = location_data.pop('city')
            if 'postal_code' in location_data:
                postal_code = location_data.pop('postal_code')

            if 'country' in location_data:
                country_name = location_data.pop('country')
                country_code = location_data.pop('country_code')

            if 'address' in location_data:
                street_name = location_data.pop('address')

            if 'state' in location_data:
                state_name = location_data.pop('state')
                state_code = location_data.pop('state_code')

            if country_name is not None and city_name is not None:
                country, created = models.Country.objects.get_or_create(
                    name=country_name, code=country_code)
                city, created = models.City.objects.get_or_create(
                    name=city_name,
                    state=state_name,
                    state_code=state_code,
                    country=country)
                address, created = models.Address.objects.get_or_create(
                    street=street_name, city=city, postal_code=postal_code)
                self.instance.address = address
            else:
                self.instance.address = None

        self.instance.gender = self.validated_data.get('gender',
                                                       self.instance.gender)
        self.instance.birthday = self.validated_data.get(
            'birthday', self.instance.birthday)
        self.instance.is_verified = self.validated_data.get(
            'is_verified', self.instance.is_verified)
        self.instance.picture = self.validated_data.get(
            'picture', self.instance.picture)
        self.instance.ethnicity = self.validated_data.get(
            'ethnicity', self.instance.ethnicity)
        self.instance.purpose_of_use = self.validated_data.get(
            'purpose_of_use', self.instance.purpose_of_use)
        self.instance.unspecified_responses = self.validated_data.get(
            'unspecified_responses', self.instance.unspecified_responses)
        self.instance.education = self.validated_data.get(
            'education', self.instance.education)
        self.instance.save()
        self.instance.user.first_name = user.get('first_name',
                                                 self.instance.user.first_name)
        self.instance.user.last_name = user.get('last_name',
                                                self.instance.user.last_name)
        self.instance.user.save()

        update_worker_cache([self.instance.user_id],
                            constants.ACTION_UPDATE_PROFILE, 'gender',
                            self.instance.gender)
        if self.instance.birthday is not None:
            update_worker_cache([self.instance.user_id],
                                constants.ACTION_UPDATE_PROFILE,
                                'birthday_year', self.instance.birthday.year)
        update_worker_cache([self.instance.user_id],
                            constants.ACTION_UPDATE_PROFILE, 'ethnicity',
                            self.instance.ethnicity)

        return self.instance

    @staticmethod
    def get_financial_accounts(obj):
        serializer = FinancialAccountSerializer(
            instance=obj.user.financial_accounts,
            many=True,
            read_only=True,
            fields=('id', 'type', 'type_detail', 'is_active', 'balance'))

        return serializer.data

    @staticmethod
    def create_worker():
        pass