在 Django 序列化器中验证互斥字段的最佳方法是什么?

问题描述 投票:0回答:2

我有以下序列化器:

class MutuallyExclusiveSerializer(serializers.Serializer):

    field_a = serializers.Charfield()

    field_b = serializers.Charfield()

    field_c = serializers.Charfield()

我想要一种可扩展的方式来在用户发送多个互斥字段时引发错误。

我可以制作一个自定义验证器,但如果将来添加更多字段,则很难扩展。在这种情况下,推荐的方法是什么?

提前致谢!

python django django-serializer
2个回答
1
投票

最后我决定这样做:

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

但是如果有更好的方法,很高兴知道它。


1
投票

我能想到的一些方法是重写你想要进行验证的方法,假设你想在

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
我的意思是在这种情况下你可以做任何你想做的事。

© www.soinside.com 2019 - 2024. All rights reserved.