如何确保至少一个字段在Serializer中不为空?

时间:2019-05-19 13:59:24

标签: django django-rest-framework django-serializer

我正在创建一个API以更新模型的某些字段,我希望这些字段是可选的。
同时,我不想接受一个空请求(带有空主体的请求)

我尝试使用“ required = False”,但这将允许空请求。

class NotificationsSerializer(serializers.Serializer):
    notify_add_friend = serializers.BooleanField(required=False)
    notify_added_to_group = serializers.BooleanField(required=False)

反正有没有为整个序列化器或其他东西定义验证器?

1 个答案:

答案 0 :(得分:2)

您可以使用object-level validation

针对特定字段:

class NotificationsSerializer(serializers.Serializer):
    notify_add_friend = serializers.BooleanField(required=False)
    notify_added_to_group = serializers.BooleanField(required=False)

    def validate(self, data):
        if 'notify_add_friend' not in data and 'notify_added_to_group' not in data:
            raise serializers.ValidationError("Must include either notify_add_friend or notify_added_to_group")
        return data

对于整个序列化器:

class NotificationsSerializer(serializers.Serializer):
    notify_add_friend = serializers.BooleanField(required=False)
    notify_added_to_group = serializers.BooleanField(required=False)

    def validate(self, data):
        if not data:
            raise serializers.ValidationError("Must include at least one field")
        return data