Какой лучший способ проверки взаимоисключающих полей в 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
Но если есть лучший способ, было бы здорово узнать о нем.