Core arguments in serializer fields - Django REST Framework - GeeksforGeeks

03 Dec, 2021
Serializer fields in Django are same as Django Form fields and Django model fields and thus require certain arguments to manipulate the behaviour of those Fields. In Django REST Framework the very concept of Serializing is to convert DB data to a datatype that can be used by javascript. This article revolves around various arguments that serializer fields can use for efficiently manipulating data in and out of serializer. 
.math-table { border-collapse: collapse; width: 100%; } .math-table td { border: 1px solid #5fb962; text-align: left !important; padding: 8px; } .math-table th { border: 1px solid #5fb962; padding: 8px; } .math-table tr>th{ background-color: #c6ebd9; vertical-align: middle; } .math-table tr:nth-child(odd) { background-color: #ffffff; }  
Read-only fields are included in the API output, but should not be included in the input during create or update operations. Any ‘read_only’ fields that are incorrectly included in the serializer input will be ignored. 
Set this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization. 
Defaults to False Syntax –  
read_only = True/False
Example – 
field_name = serializers.CharField(read_only = True) 
Set this to True to ensure that the field may be used when updating or creating an instance, but is not included when serializing the representation. 
Defaults to False Syntax –  
write_only = True/False
Example – 
field_name = serializers.CharField(write_only = True) 
Normally an error will be raised if a field is not supplied during deserialization. Set to false if this field is not required to be present during deserialization. 
Setting this to False also allows the object attribute or dictionary key to be omitted from output when serializing the instance. If the key is not present it will simply not be included in the output representation. 
Defaults to True. 
Syntax –  
write_only = True/False
Example – 
field_name = serializers.CharField(write_only = True) 
If set, this gives the default value that will be used for the field if no input value is supplied. If not set the default behaviour is to not populate the attribute at all. 
The default is not applied during partial update operations. In the partial update case only fields that are provided in the incoming data will have a validated value returned. 
May be set to a function or other callable, in which case the value will be evaluated each time it is used. When called, it will receive no arguments. If the callable has a requires_context = True attribute, then the serializer field will be passed as an argument. 
For example: 
class CurrentUserDefault:
    """
    May be applied as a `default=...` value on a serializer field.
    Returns the current user.
    """
    requires_context = True

    def __call__(self, serializer_field):
        return serializer_field.context['request'].user
When serializing the instance, default will be used if the o
object attribute or dictionary key is not present in the instance. 
Note that setting a default value implies that the field is not required. Including both the default and required keyword arguments is invalid and will raise an error. 
Syntax –  
default = value
Example – 
field_name = serializers.CharField(default = "Naveen") 
Normally an error will be raised if None is passed to a serializer field. Set this keyword argument to True if None should be considered a valid value. 
Note that, without an explicit default, setting this argument to True will imply a default value of null for serialization output, but does not imply a default for input deserialization. 
Defaults to False 
Syntax –  
allow_null = True/False
Example – 
field_name = serializers.CharField(allow_null = True) 
The name of the attribute that will be used to populate the field. May be a method that only takes a self argument, such as URLField(source=’get_absolute_url’), or may use dotted notation to traverse attributes, such as EmailField(source=’user.email’). When serializing fields with dotted notation, it may be necessary to provide a default value if any object is not present or is empty during attribute traversal. 
The value source=’*’ has a special meaning, and is used to indicate that the entire object should be passed through to the field. This can be useful for creating nested representations, or for fields which require access to the complete object in order to determine the output representation. 
Defaults to the name of the field. 
Syntax –  
source = value
Example – 
field_name = serializers.CharField(source = "user.name") 
A list of validator functions which should be applied to the incoming field input, and which either raise a validation error or simply return. Validator functions should typically raise serializers.ValidationError, but Django’s built-in ValidationError is also supported for compatibility with validators defined in the Django codebase or third party Django packages. 
Syntax –  
validators = [function_1, function_2]
Example – 
field_name = serializers.CharField(validations = [validate_name, validate_username]) 
A dictionary of error codes to error messages. It works the same way as error_messages – Django Built-in Field Validation Syntax –  
error_messages = {'argument':'message'}
Example – 
field_name = serializers.CharField(error_messages = {"unique":"Data should be unique"}) 
A short text string that may be used as the name of the field in HTML form fields or other descriptive elements. It is same as label – Django Form Field Validation 
Syntax –  
label = value
Example – 
field_name = serializers.CharField(label = "Name") 
A text string that may be used as a description of the field in HTML form fields or other descriptive elements. It is same as help_text – Django Built-in Field Validation. Syntax –  
help_text = value
Example – 
field_name = serializers.CharField(help_text = "Enter only 10 characters") 
A value that should be used for pre-populating the value of HTML form fields. It is same as initial – Django Form Field Validation. You may pass a callable to it, just as you may do with any regular Django Field: Syntax –  
initial = value
Example – 
import datetime
from rest_framework import serializers
class ExampleSerializer(serializers.Serializer):
    day = serializers.DateField(initial=datetime.date.today)
ruhelaa48
kalrap615
Django-REST
rest-framework
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Python | Pandas dataframe.groupby()
Defaultdict in Python
Python | Get unique values from a list
Python Classes and Objects
Python | os.path.join() method
Create a directory in Python