如何不在序列化器中验证所选字段

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

我有以下序列化器来接收设置更改,并且我想检查请求中是否至少存在一项不需要的设置。我现在拥有的验证函数将像任何其他字段一样检查

dot_id
user_id
,但是如何从验证中排除这两个字段?

class FrameImageSerializer(serializers.Serializer):
    dot_id = serializers.IntegerField()
    user_id = serializers.IntegerField()
    is_active = serializers.BoolField(required=False)
    is_fullscreen = serializers.BoolField(required=False)
    resolution = serializers.ListField(
        required=False,
        min_length=4,
        max_length=4
    )

    class Meta:
        fields = "__all__"

    def validate(self, data):
        if not data:  # except for dot_id and user_id...
            raise serializers.ValidationError(
                "At least one setting change needs to be present!"
            )
        return data

更新: 现在我找到了这样的解决方案:

clean_data = data[2:]  # since these two fields are always first
if not clean_data:
    ...

有没有更聪明的方法来做我想做的事?

python validation serialization django-rest-framework
1个回答
0
投票

据我了解你的问题,你想从验证中排除 dot_id 和 user_id ,这意味着它们将始终被视为有效,无论这两个字段的值是什么(我猜你可能在其他地方检查它们) .

您正在使用“validate”进行对象级验证,我认为您可以使用“validate_fieldname”添加字段级验证以将它们设置为始终有效: # ... def validate_dot_id(self, value): """No check at all, just pass the value whatever it is""" return value

与 user_id 相同

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