Amir Hossain
Amir Hossain

Reputation: 693

Return errors as json django rest api

Beginner alert. I am using ListCreateAPIView for listing and creating purposes. Whenever I create through an api it returns responses in json format.

{"id":16,"title":"yyyyyyyy","destination_place":[1]}

But if there are errors like duplicate slug or title it returns errors like this

IntegrityError at /api/holidays/
duplicate key value violates unique constraint "holidays_holiday_slug_key"
DETAIL:  Key (slug)=(yyyyyyyy) already exists.

Is there any way to return these errors in json format. My views

class HolidayList(ListCreateAPIView):
    queryset = Holiday.objects.all()
    serializer_class = HolidaySerializer
    permission_classes = [IsAdminUser, IsAuthenticated]

Model

class Holiday(models.Model):
   title = models.CharField(verbose_name=_("Title"), max_length=255)
   slug = models.SlugField(unique=True)
   destination_place = models.ManyToManyField(to='places.Place',related_name='destination_place',null=True,blank=True)

Upvotes: 1

Views: 252

Answers (1)

Sachin
Sachin

Reputation: 3664

In HolidaySerializer, add UniqueValidator on slug field.

Example:

from rest_framework.validators import UniqueValidator

class HolidaySerializer(serializers.ModelSerializer):
    slug = serializers.SlugField(
             max_length=255,
             validators=[UniqueValidator(queryset=Holiday.objects.all())])

    class Meta:
        model = Holiday
        fields = ('id', 'title', 'slug', 'destination_place', )

This will return back the unique constraint error in the JSON format.

You can customize the message. Look at the docs.

Upvotes: 1

Related Questions