Как скрыть поле из ответа Json

Я хочу скрыть от публичного api простое поле Serializer (созданное без какой-либо модели). Как я могу это решить?

same_result = serializers.SerializerMethodField()

Для достижения этой цели можно использовать аргумент write_only :

class YourSerializer(serializers.Serializer):
    same_result = serializers.SerializerMethodField(write_only=True)

вы можете переопределить метод to_representation

     def to_representation(self, instance):
      data = super().to_representation(instance)     

      data.pop('same_result')
      return data

Я думаю, вы можете использовать конфигурацию permissions для идентификации публичного или частного пользователя на основе членства в группе, затем вы можете переключать в представлении, что-то вроде:

class UserViewSet(viewsets.ViewSet):

    def list(self, request):
        queryset = User.objects.all()
        if request.user.groups.filter(name="private").exists():    
            serializer = PrivateUserSerializer(queryset, many=True)
        else:
            serializer = PublicUserSerializer(queryset, many=True)
        return Response(serializer.data)

Затем вы определяете поля в вашем сериализаторе по своему усмотрению.

Вернуться на верх