ভ্যালিডেশন আমরা কয়েক ভাবে করতে পারি
- ফিল্ড লেভেল ভ্যালিডেশন
- অবজেক্ট লেভেল ভ্যালিডেশন
- রেস্ট ভ্যালিডেটর
- কোর আর্গুমেন্ট
ফিল্ড লেভেল ভ্যালিডেশন
যখন নির্দিষ্ট কোন ফিল্ডের ভ্যালিডেশন দরকার তখন validate_fild_name মেথড দিয়ে ভ্যালিডেশন করা যায় যেমন আমার serializer এ দুইটি ফিল্ড আছে title,content যদি দুইটার ফিল্ড লেভেল ভ্যালিডেশন দরকার হয় তাহলে নিচের মতো মেথড হবে
class PostSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=255)
content = serializers.CharField()
active = serializers.BooleanField(default=False)
def validate_title (self, value):
"""
Check that the name is not empty.
"""
if not value:
raise serializers.ValidationError("Name is required")
return value
def validate_content (self, value):
"""
Check that the description is at least 10 characters long.
"""
if len(value) < 10:
raise serializers.ValidationError("content must be at least 10 characters long")
return value
অবজেক্ট লেভেল ভ্যালিডেশন
একসাথে অনেক ফিল্ড ভ্যালিডেশন করতে চাচ্ছি যেমন name এবং ডেসক্রিপশন একই রকম হওয়া যাবে না তাহলে শুধু validate মেথড ব্যবহার করবো
class PostSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=255)
content = serializers.CharField()
active = serializers.BooleanField(default=False)
def validate(self, data):
"""
Check that the name and content fields are equal.
"""
if data['title'] == data['content']:
raise serializers.ValidationError("title and content must not be equal")
return data
রেস্ট ভ্যালিডেটর
এক্ষেত্রে যেকোনো নামে ফাংশন বানিয়ে ওই নামটি ফিল্ডে validators= এ দিতে হয়
ফাংশনটি কিন্তু ক্লাস এর আগে লিখেছি
def multiple_of_ten(value):
if value % 10 != 0:
raise serializers.ValidationError('Not a multiple of ten')
return value
class PostSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=255)
content = serializers.CharField()
active = serializers.BooleanField(default=False)
score = serializers.IntegerField(validators=[multiple_of_ten])
কোর আর্গুমেন্ট
django মডেল এ যেমন ফিল্ড ভ্যালিডেশন করা যায় রেস্ট ফ্রেমওয়ার্ক এ একই কাজ করা যায় কারণ রেস্ট ফ্রেমওয়ার্ক আমাদের সেই সুবিধা তৈরী করে দিয়েছে নিচের লিংক থেকে দেখে দেখে ভ্যালিডেশন করতে পারি।
serializers.DecimalField(max_digits=5, decimal_places=2)
মডেল সিরিয়ালাইজার কে ভ্যালিডেশন দেখি
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model= Post
fields = "__all__"
def validate_title (self, value):
"""
Check that the title is not empty.
"""
if not value:
raise serializers.ValidationError("title is required")
return value
def validate_content (self, value):
"""
Check that the content is at least 10 characters long.
"""
if len(value) < 10:
raise serializers.ValidationError("content must be at least 10 characters long")
return value
def validate(self, data):
"""
Check that the name and content fields are equal.
"""
if data['title'] == data['content']:
raise serializers.ValidationError("title and content must not be equal")
return data