Return String if object Existed 函数在 Django Rest Framework 中

Return String if object Existed Function in Django Rest Framework

我有一个关于 Function which Return String if object Existed in Django Rest Framework 的问题。

我要设置条件: 如果 FriendshipRequest 模型有 from_user = request.userto_user=self.user,这个 relationship_to_user 字段将 return: 'Existed',如果没有,打印 'Not Existed'

序列化程序中的代码:

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'

此代码在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)

问题回溯:得到

 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'

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)