I use django-rest-framework to create Rest API within Django framework. And it's possible to return any validationError
beside serializer methods.
But, I was wondering is it possible to return errors from save()
method of django model that be translated to django rest validationError
?
For example imagine I want to limit creating objects on a specific table. like this:
class CustomTable(models.Model):
... # modles fields go here
def save():
if CustomTable.objects.count() > 2:
# Return a validationError in any serializer that is connected to this model.
Note I could use raise ValueError
or raise ValidationError
, but they all cause 500 error on endpoint. But i want to return a response in my api view that says for example 'limit reached'
The DRF ValidationError
is handled in the serializer so you should catch any expected errors when calling your model's save method and use it to raise a ValiddationError
.
For example, you could do this in your serializer's save method:
def save(self, **kwargs):
try:
super().save(**kwargs)
except ModelError as e:
raise serializers.ValidationError(e)
Where ModelError
is the error you're raising in your model