Nadhem Maaloul
Nadhem Maaloul

Reputation: 433

How to ensure at least one of the Fields is not blank in Serializer?

I am creating an API to update some of my model's fields, I want the fields to be optional.
At the same time, I don't want to accept an empty request (a request with empty body)

I tried with "required=False" but this will allow empty requests.

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

Is there anyway to define a validator for the whole serializer or something?

Upvotes: 3

Views: 2832

Answers (1)

Gasanov
Gasanov

Reputation: 3399

You can use object-level validation:

for specific fields:

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

for whole serializer:

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

Upvotes: 7

Related Questions