我有以下序列化器:
class MutuallyExclusiveSerializer(serializers.Serializer):
field_a = serializers.Charfield()
field_b = serializers.Charfield()
field_c = serializers.Charfield()
我想要一种可扩展的方式来在用户发送多个互斥字段时引发错误。
我可以制作一个自定义验证器,但如果将来添加更多字段,则很难扩展。在这种情况下,推荐的方法是什么?
提前致谢!
最后我决定这样做:
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
但是如果有更好的方法,很高兴知道它。
我能想到的一些方法是重写你想要进行验证的方法,假设你想在
create
上做,你可以这样做:
def create(self, validated_data):
val_len = len(validated_data) if validated_data else 0
if val_len != 1:
return ERROR
return Comment(**validated_data)
诗。
ERROR
我的意思是在这种情况下你可以做任何你想做的事。