我有一个序列化程序:
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
所以我想保留
platform
和 sdk_version
字段进行验证。它们是此有效载荷输入继续进行所必需的。
但是,一旦我访问
payload.validated_data
.,我想排除它们
我尝试添加
get_fields
方法,它只弹出上下文中传递的任何字段。
context = {
'exclude_fields': [
'sdk_version', 'platform'
]
}
payload = ValidateCreateNoCodeEvent(data=request.data, context=context)
所以这也将排除验证。
我该如何解决这个问题?