hzdg / django-enumfields

Real Python Enums for Django
Other
146 stars 59 forks source link

Customize enum choices in serializer #120

Open MehdiDRISSIB opened 3 years ago

MehdiDRISSIB commented 3 years ago

Hello

Is that possible to restrict choices of enum class in serializer ?

This is my enum class:

class TransferType(Enum):
    Paypal = "PP"
    WesternUnion = "WU"
    Wallet = "WT"

    class Labels:
        Paypal = _('Paypal')
        WesternUnion = _('Western Union')
        Wallet = _('Wallet')

My serializer:

class TransferSerializer(EnumSupportSerializerMixin, serializers.ModelSerializer):
    wallet = serializers.SerializerMethodField(source='get_wallet')
    transfer_type = EnumField(enum=[TransferType.Paypal, TransferType.WesternUnion ])
    .......

I got this error when I post data:

isinstance() arg 2 must be a type or tuple of types

Exception Value: | isinstance() arg 2 must be a type or tuple of types Exception Location: C:\Users\mehdi\PycharmProjects\venv\lib\site-packages\enumfields\drf\fields.py, line 35, in to_internal_value

Thank you

akx commented 3 years ago

You can't pass in a list where an enum is expected. Better just add a validator function.

def validate_transfer_type(self, value: TransferType):
    if value == TransferType.Wallet:
        raise serializers.ValidationError("Wallet transfers not supported")
    return value
MehdiDRISSIB commented 3 years ago

Thanks a lot for your quick answer