mrghofrani
mrghofrani

Reputation: 1475

Raise error in create method django rest framework

I throw ValidationError while validating data in my clean method in models.py. How can I catch this error in my custom create method so that it throws a json object containing the error detail in this way

{
    "detail":"input is not valid"
}
#models.py
class Comment(models.Model):
    text = models.CharField(max_length=256)
    commenter = models.ForeignKey(User, on_delete=models.SET_NULL)
    post = models.ForeignKey(Post, on_delete=models.SET_NULL)

    def clean(self, *args, **kwargs):
        if containsBadWords(text):
            raise ValidationError(_("Be Polite"))
#serializer.py
def create(self, validated_data):
    request = self.context.get('request', None)
    commenter = request.user
    try:
        obj = Comment.objects.create(
            post = validated_data['post'],
            commenter = commenter,
            text = validated_data['text']
        )
    except ValidationError as ex:
        raise ex
    return obj

Upvotes: 7

Views: 6760

Answers (1)

mrghofrani
mrghofrani

Reputation: 1475

Check that you have thrown serializers.ValidationError not ValidationError of django.core.exceptions. You can change your create method in this way:

def create(self, validated_data):
    request = self.context.get('request', None)
    commenter = request.user
    try:
        obj = Comment.objects.create(
            post = validated_data['post'],
            commenter = commenter,
            text = validated_data['text']
        )
    except ValidationError as ex:
        raise serializers.ValidationError({"detail": "input is not valid"})
    return obj

Upvotes: 17

Related Questions