Django REST Framework(DRF)のvalidation


DRFのvalidation基本をメモ

serializer.py
from rest_framework import serializers
from news.models import Article

class ArticleSerializer(serializers.Serializer):
#ここで定義しているものが後に渡されるオブジェクトのkeyになる。例えばidを消した場合、レスポンスでidを返さない。laravelのresourceてきなやつ。
    id = serializers.IntegerField(read_only=True) #read_onlyなので変更できない
    author = serializers.CharField()
    title = serializers.CharField()
    description = serializers.CharField()
    body = serializers.CharField()
    location = serializers.CharField()
    publication_date = serializers.DateField()
    active = serializers.BooleanField()
    created_at = serializers.DateTimeField(read_only=True)
    updated_at = serializers.DateTimeField(read_only=True)

    def validate(self, data): #dataはオブジェクト
        if data["title"] == data["description"]:
            raise serializers.ValidationError("Title and Description must be different from one another!")
        return data

    def validate_title(self, value):
#valueはdataオブジェクトのvalueのどれか。関数名_の後にkeyを指定してあげるとそのvalueが取得できる
        if len(value) < 60:
#len()はpythonの長さを計算する関数。list、dictだけでなくstrも可能
            raise serializers.ValidationError("The title has to be at least 60 characters long!")
#JS, PHPでいうところのthrow
        return value