Use the partial=True
attribute of the serializer.
Like below:
evs = EventSerializer(ev, data={title="Event Title"}, partial=True)
Full Example
class Event(models.Model):
title = models.CharField(max_length=100)
description = models.CharField(
max_length=255, null=False, blank=False, default="Your description"
)
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = [
"title",
"description",
]
def validate_title(self, value):
print("validate_title")
def validate_description(self, value):
print("validate_description")
def validate(self, value):
print("validate")
And then calling serializer is_valid()
like below:
ev = Event.objects.first()
Event.objects.filter(pk=ev.pk).update(description="")
ev.refresh_from_db()
evs = EventSerializer(ev, data={})
# evs = EventSerializer(ev, data={title="a title"}, partial=True)
print(evs.is_valid())
validate_title()
is not called iftitle
is not present indata
or if the value oftitle
is not truthyvalidate()
is always called- if any of
validate_<field>()
returns ValidationError, thenvalidate()
is not called
References
None