如何确保序列化程序中至少有一个字段不为空?
How to ensure at least one of the Fields is not blank in Serializer?
我正在创建一个 API 来更新我模型的一些字段,我希望这些字段是可选的。
同时,我不想接受一个空请求(一个请求体为空的请求)
我试过 "required=False" 但这将允许空请求。
class NotificationsSerializer(serializers.Serializer):
notify_add_friend = serializers.BooleanField(required=False)
notify_added_to_group = serializers.BooleanField(required=False)
有没有为整个序列化器定义一个验证器之类的东西?
您可以使用 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
我正在创建一个 API 来更新我模型的一些字段,我希望这些字段是可选的。
同时,我不想接受一个空请求(一个请求体为空的请求)
我试过 "required=False" 但这将允许空请求。
class NotificationsSerializer(serializers.Serializer):
notify_add_friend = serializers.BooleanField(required=False)
notify_added_to_group = serializers.BooleanField(required=False)
有没有为整个序列化器定义一个验证器之类的东西?
您可以使用 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