post-thumb

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