DRF) serializer에서 validation 메소드 만들기

Django Rest Framework에서 serializer에서 각 필드에 대한 validation 로직을 추가할 수 있습니다. 검증을 위한 메서드 명은 validate_필드이름 라고 작성하고 검증할 로직을 구현하면 됩니다.

간단한 방 정보를 다루는 예시를 통해서 사용법을 설명하겠습니다.

모델

class Room(model.Model):
    name = models.CharField(max_length=100)
    price = models.PositiveIntegerField()
    description = models.TextField()

시리얼라이저

class RoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = ["name", "price", "description"]

    def validate_name(self, value):
        if len(value) < 3:
            raise serializers.ValidationError("방 이름은 최소 3글자 이상이어야 합니다.")
        return value

    def validate_price(self, value):
        if value < 0:
            raise serializers.ValidationError("가격은 음수일 수 없습니다.")
        return value

이 예시에서는 Room 모델을 정의하고, 이를 시리얼라이저로 변환하는 RoomSerializer를 만들었습니다. RoomSerializerRoom 모델과 연결되어 있습니다.

RoomSerializer 내부에서 validate_name 메소드와 validate_price 메소드를 정의했습니다.

  • validate_name 메소드는 name 필드의 값을 검증합니다. 만약 이름이 3글자 미만이면 serializers.ValidationError을 발생시켜 에러를 일으킵니다.
  • validate_price 메소드는 price 필드의 값을 검증합니다. 만약 가격이 음수라면 마찬가지로 에러를 발생시킵니다.

이런 식으로 각 필드에 대한 검증 로직을 추가할 수 있습니다. 이제 이 시리얼라이저를 사용하면, 입력된 데이터가 검증되고 필요한 처리가 이루어집니다.

serializer = RoomSerializer(data=data) 

if serializer.is_valid(): 
    # 유효한 경우, 데이터를 저장하거나 다른 처리를 할 수 있습니다. 
    room = serializer.save() 
else: 
    # 유효하지 않은 경우, 에러 메시지를 확인할 수 있습니다. 
    errors = serializer.errors

이렇게 하면 시리얼라이저를 통해 데이터를 검증하고 처리할 수 있습니다.