How to make DRF serializer compatible with uppercase

Viewed 590

My Boss decided to migrate Rest API from *ava to Django. The previous Java-guy designed every database field in camelCase, such as userName, and every API POST data in camelCase.

When I refactor these to DRF, I got following Model. The REST API also receive post data in camelCase, so I must lower the post data or is_valid() will return False.

class Useraccount(models.Model):
    username = models.CharField(db_column='userName')

REST API request data:

{
"userName": "Jenny"  # I need lower "userName" to "username"
}

Is there a method to let DRF compitable with uppercase POST DATA? I don't want to lower these userName in every APIView.

1 Answers

Unfortunately i don't think there is any easy way to accomplish this. What you can do however is to have a write serializer which will do this for you.

class WriteSerializer(serializers.ModelSerializer):
    userName = serializers.CharField(source='username', write_only=True)
    class Meta:
       model = MyModel
       fields = ['userName']

class ReadSerializer(serializers.ModelSerializer):
    class Meta:
       model = MyModel
       fields = ['username']

I'm not sure but you can also do it in one model by manually specifying all the fields and telling which field is write_only and which is ready_only, but that also is a lot of work I assume.

Related