2

I have a question about Function which Return String if object Existed in Django Rest Framework.

I want to set condition: If FriendshipRequest model have from_user = request.user and to_user=self.user, this relationship_to_user fields will return: 'Existed', if not, print 'Not Existed'

Code in Serializers:

class UserDetailSerializer(ModelSerializer):
    relationship_to_user = SerializerMethodField()
    class Meta:
        model = User
        fields = [
            'id',
            'relationship_to_user',
        ]

    def get_relationship_to_user(self, instance):
      request = self.context.get('request')
      if FriendshipRequest.objects.filter(from_user=request.user, to_user=instance).exist():
          return 'Existed'
      else:
          return 'Not Existed'

This code is in Viewset.py

class UserDetailAPIView(RetrieveAPIView):
    queryset = User.objects.all()
    serializer_class = UserDetailSerializer
    lookup_field = 'username'

    def retrieve(self, request, *args, **kwargs):
        to_user = self.get_object()
        serializer = UserDetailSerializer(to_user, context={'request': request})
        return Response(serializer.data)

Issues Traceback: get

 File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Python27\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
  489.             response = self.handle_exception(exc)

File "C:\Python27\lib\site-packages\rest_framework\views.py" in handle_exception
  449.             self.raise_uncaught_exception(exc)

File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
  486.             response = handler(request, *args, **kwargs)

File "C:\Python27\lib\site-packages\rest_framework\generics.py" in get
  210.         return self.retrieve(request, *args, **kwargs)

File "C:\Users\User\Desktop\FeedGit\backend\api\authentication\views.py" in retrieve
  35.         return Response(serializer.data)

File "C:\Python27\lib\site-packages\rest_framework\serializers.py" in data
  534.         ret = super(Serializer, self).data

File "C:\Python27\lib\site-packages\rest_framework\serializers.py" in data
  263.                 self._data = self.to_representation(self.instance)

File "C:\Python27\lib\site-packages\rest_framework\serializers.py" in to_representation
  501.                 ret[field.field_name] = field.to_representation(attribute)

File "C:\Python27\lib\site-packages\rest_framework\fields.py" in to_representation
  1755.         return method(value)

File "C:\Users\User\Desktop\FeedGit\backend\api\authentication\serializers.py" in get_relationship_to_user
  166.         if FriendshipRequest.objects.filter(from_user=request.user, to_user=instance).exist():

Exception Type: AttributeError at /api/v1/users/duongnuhabang/
Exception Value: 'QuerySet' object has no attribute 'exist'
8
  • so what's the problem? Commented Dec 22, 2017 at 5:08
  • Update Issues, @Ykh Commented Dec 22, 2017 at 5:10
  • 1
    return ('Existed') change to return 'Existed' Commented Dec 22, 2017 at 5:11
  • 1
    friend_request_sent = FriendshipRequest.objects.filter(from_user=self.request.user, to_user=user) from where user comes from? Commented Dec 22, 2017 at 5:12
  • 1
    thank you for remind,updated in answer Commented Dec 22, 2017 at 5:15

1 Answer 1

5

serializers.py

class UserDetailSerializer(ModelSerializer):
    relationship_to_user = SerializerMethodField()
    class Meta:
        model = User
        fields = [
            'id',
            'relationship_to_user',
        ]

    def get_relationship_to_user(self, instance):
        request = self.context.get('request')
        if FriendshipRequest.objects.filter(from_user=request.user, to_user=instance).exists():
            return 'Existed'
        else:
            return 'Not Existed'

views.py

class MyUser(RetrieveAPIView):
    serializer_class = UserDetailSerializer

    # you can override this method or not
    def retrieve(self, request, *args, **kwargs):
        to_user = self.get_object()
        serializer = UserDetailSerializer(to_user, context={'request': request})
        return Response(serializer.data)
Sign up to request clarification or add additional context in comments.

10 Comments

'instance' is not defined in Views.py, bro
instance mean the User instance you want to serializer
FriendshipRequest has from_user and to_user,the instance in serializer = UserDetailSerializer(instance, context={'request': request}) mean to_user,from_user is request.user.
it's FriendshipRequest.objects.filter(from_user=request.user, to_user=instance).exists() not FriendshipRequest.objects.filter(from_user=request.user, to_user=instance).exist(), i miss a s character.
:) :) :) :) :) :)
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.