Search Here

Django Rest Framework API Serializer Tips Make field hidden in Serializer Response

In Django Rest Framework if you want to hide a field from sending as a response returned from Django Server then configure in your serializer by adding extra_kwargs attribute within serializer.

Register App

In src\urls.py

from django.urls import path, reverse

urlpatterns = [
    path('api/users/', include('users.api_urls') ),
]

Create a route to access URL route within App

In users\api_urls.py

from django.urls import path
from users import api_views
app_name = "api_users"

urlpatterns = [
path( '', api_views.ListView.as_view(), name="list" )
]

Creating Serializer

In users\serializers.py

from rest_framework import serializers
from django.contrib.auth.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
        extra_kwargs = {
            'password' : {
                'write_only' : True
            }
        }     

To make a field hidden use extra_kwargs which takes a dictionary and specify the field as key and pass write_only as True to make the field hidden during fetching response.
The attribute write_only make field writable but cannot read from the response.

Creating Views

In users\api_views.py

from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth.models import User

from users.serializers import UserSerializer

# Create your views here.
class ListView( APIView ):

    def get(self, request, format=None):
        
        info = {
            'list': []
        }

        query_set = User.objects.all()
        serializer = UserSerializer( query_set, many=True )
        info['list'] = serializer.data

        return Response(info)

Import UserSerializer and to pass the response call the .data an attribute which generates the JSON response.

Watch Video