整数或字符串的序列化器字段

ked*_*dod 1 python django django-rest-framework

我想要一个带有字段的序列化器,该字段可以采用整数(不是浮点数或任何其他数字类型!)或字符串作为输入。有什么方法可以使它更好/更漂亮吗?

class MyField(Field):
    def to_representation(self, value):
        if isinstance(value, int):
            return value
        elif isinstance(value, str):
            return value
        else:
            raise ValidationError('Error')

    def to_internal_value(self, data):
        if isinstance(data, int):
            return data
        elif isinstance(data, str):
            return data
        else:
            raise ValidationError('Error')

class MySerializer(Serializer):
    my_field = MyField()
Run Code Online (Sandbox Code Playgroud)

Arn*_*Arn 5

您可以组合以下条件:

class MyField(Field):
    def to_representation(self, value):
        if isinstance(value, int):
            return value
        elif isinstance(value, str) and value.isdigit():
            return value
        raise ValidationError('Error')

    def to_internal_value(self, data):
        if isinstance(data, int):
            return data
        elif isinstance(data, str) and data.isdigit():
            return data
        raise ValidationError('Error')

class MySerializer(Serializer):
    my_field = MyField()
Run Code Online (Sandbox Code Playgroud)