Какой лучший способ проверки взаимоисключающих полей в Django Serializer?

У меня есть следующий сериализатор:

class MutuallyExclusiveSerializer(serializers.Serializer):

    field_a = serializers.Charfield()

    field_b = serializers.Charfield()

    field_c = serializers.Charfield()

Мне нужен масштабируемый способ вызвать ошибку, если пользователь отправляет более 1 из этих полей, которые являются взаимоисключающими.

Я могу сделать пользовательский валидатор, но его нелегко масштабировать, если в будущем будут добавлены дополнительные поля. Какова рекомендуемая методология в этом случае?

Заранее спасибо!

Некоторый способ, о котором я могу думать, это переопределение метода, в котором вы хотите сделать проверку, предположим, вы хотите сделать это на create, вы можете сделать это следующим образом:

def create(self, validated_data):
    if validated_data.get('field_a') and validated_data.get('field_b') and validated_data.get('field_c'):
        return ERROR
    return Comment(**validated_data)

Пс. Под ERROR я подразумеваю, что вы можете делать все, что хотите в этом случае.

В конце я решаю сделать это следующим образом:

def validate(self, attrs):
    # Validates that only one element is added
    items = len([attr for attr in attrs.values() if attr is not None])
    if items != 1:
        raise serializers.ValidationError('Please add just 1 item at a time')

    return attrs

Но если есть лучший способ, было бы здорово узнать о нем.

Вернуться на верх