Structure Of Serializer file
In this tutorial we will lean about structure and the basic operation that can be perform in serializer.py file .
from rest_framework import exceptions
from django.utils.timezone import localtime
class Serializer_Name(serializers.ModelSerializer):
name = serializers.SerializerMethodField(read_only=True)
image = serializers.SerializerMethodField()
type = serializers.ReadOnlyField(source="type.system")
location =serializers.PrimaryKeyRelatedField(read_only=False,queryset=Locations.objects.all(),
required=True
)
added_by = UserListSerializer(read_only=True)
added_by = UserListSerializer(many=True,write_only=True)
company_name=serializers.StringRelatedField(many=True,required=False,read_only=True)
uuid=serializers.CharField(read_only=True)
name=serializers.CharField(max_length=255)
created_at = serializers.DateTimeField(format="%d %B, %Y", read_only=True)
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True)
image = ItemListGallerySerializer(source="item_gallery_item", many=True)
class Meta:
model = model_name
# exclude = ['added_by']
fields="__all__"
depth = 1
def __init__(self, *args, **kwargs):
super(Serializer_Name, self).__init__(*args, **kwargs)
request = self.context.get('request')
if request and request.method == 'POST':
self.Meta.depth = 0
elif request and request.method == 'PUT':
self.Meta.depth = 0
else:
self.Meta.depth = 1
def to_representation(self, instance):
representation = super(Serializer_Name,
self).to_representation(instance)
representation['created_at_new'] = instance.created_at.strftime(
'%b %d')
representation['updated_at_new'] = instance.updated_at.strftime(
'%b %d, %Y')
return representation
def get_image(self, obj):
request = self.context.get("request")
if obj.image:
return request.build_absolute_uri(obj.image.url)
def get_invoiceDueDate(self, obj):
return localtime(obj.invoiceuuid.invoicedate).strftime("%Y-%m-%d")
def validate(self, data):
author = self.context['author'] # optional , reading context data
if "#" in data['title']:
raise exceptions.ValidationError(detail="can not include '#' in title")
return data
def create(self, validated_data):
instance = super().create(validated_data)
title = validated_data.get('title') # optional, read validated data
validated_data['author'] = self.context['author'] # optional , saving extra data
post = Post.objects.create(**validated_data) # saving post object
# return post
print(self.context.get("request").user)
print(self.context.get("audit_activity")
print(self.Meta.model._meta.verbose_name_plural)
return instance
def update(self, instance, validated_data):
# return super().update(instance, validated_data)
instance.title = validated_data.get('title', instance.title)
instance.author = self.context['author']
instance.save()
return instance