I have a serializer:
class ValidateCreateNoCodeEvent(serializers.Serializer):
ALLOWED_PLATFORM_VALUES = [(1, 'Android'), (2, 'iOS')]
ALLOWED_GESTURE_TYPES = [
(0, 'Single Tap'),
(1, 'Double Tap'),
(6, 'Long Press')
]
screen_name = serializers.CharField(max_length=100, min_length=1, required=True)
gesture_type = serializers.ChoiceField(required=True, choices=ALLOWED_GESTURE_TYPES)
view_type = serializers.CharField(required=True)
sdk_version = serializers.CharField(required=True)
platform = serializers.ChoiceField(required=True, choices=ALLOWED_PLATFORM_VALUES)
element_id = serializers.CharField(required=True, allow_null=False, allow_blank=False)
name = serializers.CharField(required=True, allow_blank=False, allow_null=False)
category = serializers.ListField(required=True, min_length=1)
description = serializers.CharField(required=False, max_length=500)
def validate_sdk_version(self, sdk_version):
... does some validation
return sdk_version
def get_fields(self):
fields = super().get_fields()
exclude_fields = self.context.get('exclude_fields', [])
for field in exclude_fields:
# providing a default prevents a KeyError
# if the field does not exist
fields.pop(field, default=None)
return fields
So I would like to keep, say, platform and sdk_version fields for validation. They are a must for this payload input to proceed further.
However, I would like to exclude them once I access payload.validated_data.
I have tried to add get_fields method which just pops up whatever fields are passed in the context.
context = {
'exclude_fields': [
'sdk_version', 'platform'
]
}
payload = ValidateCreateNoCodeEvent(data=request.data, context=context)
So this will also exclude the validation.
How can I fix this?