[DRF] Serializer에 writable non-model field 추가하기

문제

DjangoDRF에서 model에 정의하지 않은 필드를 POST / PUT용 serializer에 추가하고 싶을 때가 있다. 그냥 serializers.CharField()로 추가하면 unexpected keyword라고 뜨면서 추가할 수 없는 문제가 발생한다.

해결법

Serializer에 추가해둔 필드를 validate 메소드에서 model 생성에 사용되지 않도록 pop() 시켜준다.

class UserSerializer(serializers.ModelSerializer):
    non_model_field = serializers.CharField(max_length=300, allow_blank=True, write_only=True)

    class Meta:
        model = User
        fields = ('id', 'username', 'password', 'non_model_field')

    def validate(self, attrs):
        # ...
        attrs.pop('non_model_field', None)
        return super().validate(attrs)

REF

Stack Overflow


2022-01-05