문제
Django 및 DRF에서 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)