Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- lass ProfileSerializer(serializers.ModelSerializer):
- # url = serializers.HyperlinkedRelatedField(source="user", view_name="user_profile")
- user = serializers.PrimaryKeyRelatedField(read_only=True)
- class Meta:
- model = Profile
- fields = ('token', 'user','current_location', 'permanent_location', 'dob',
- 'about_me', 'gender_status', 'create_profile_for', 'marital_status',
- 'height', 'weight', 'body_type', 'complexion',)
- def to_internal_value(self, data):
- first_name = data.pop('first_name', None)
- last_name = data.pop('last_name', None)
- data = super(ProfileSerializer, self).to_internal_value(data)
- print('data', data)
- data['first_name'] = first_name
- data['last_name'] = last_name
- return data
- def update(self, instance, validated_data):
- first_name = validated_data.pop('first_name', None)
- last_name = validated_data.pop('last_name', None)
- user_inst_fields = {}
- if first_name:
- user_inst_fields['first_name'] = first_name
- if last_name:
- user_inst_fields['last_name'] = last_name
- if user_inst_fields:
- User.objects.update_or_create(id=instance.user.id, defaults=user_inst_fields)
- profile, created = Profile.objects.update_or_create(token=instance.token, defaults=validated_data)
- print('profile', profile, created)
- return profile
- class UserSerializer(serializers.ModelSerializer):
- profile = ProfileSerializer(required=True)
- class Meta:
- model = User
- fields = ('id', 'profile', 'username', 'email', 'first_name', 'last_name',)
- class UserProfile(APIView):
- serializer_class = ProfileSerializer
- def get(self, request, token=None, format=None):
- """
- Returns a list of profile of user
- """
- reply={}
- try:
- profile_instance = Profile.objects.filter(user=self.request.user)
- if token:
- profile = profile_instance.get(token=token)
- reply['data'] = self.serializer_class(profile).data
- else:
- reply['data'] = self.serializer_class(profile_instance, many=True).data
- except:
- reply['data']=[]
- return Response(reply, status.HTTP_200_OK)
- def put(self, request, token=None, *args, **kwargs):
- """
- update a profile
- """
- print('token', token)
- print('request data', request.data)
- if token:
- try:
- profile = Profile.objects.get(token=token)
- except:
- return Response(status=status.HTTP_400_BAD_REQUEST)
- serialized_data = self.serializer_class(profile, data=request.data, partial=True)
- reply={}
- if serialized_data.is_valid():
- profile = serialized_data.save(user=request.user)
- reply['data'] = self.serializer_class(profile, many=False).data
- return Response(reply, status.HTTP_200_OK)
- else:
- return Response(serialized_data.errors, status.HTTP_400_BAD_REQUEST)
- url(
- r'^user/profile/(?P<token>[0-9a-z]+)$',
- views.UserProfile.as_view(),
- name="user_profile"
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement