2017-11-13 9 views
0

初心者向けの警告。私はListCreateAPIViewを使用してリストを作成し、目的を作成しています。私はAPIを介して作成するたびにjson形式で応答を返します。json django rest apとして返すエラー

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

しかし、重複したスラグやタイトルなどのエラーがある場合、それはこの

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

のようなエラーを返すJSON形式で、これらのエラーを返すためにどのような方法があります。 マイビューHolidaySerializer

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

モデル

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) 
+0

「ホリデー」モデルを投稿してください。 –

+0

休暇モデルが追加されました。 – Amir

答えて

1

slugフィールド上UniqueValidatorを追加します。

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',) 

これはJSON形式で一意制約エラーが戻って返されます。

メッセージをカスタマイズすることができます。 docsを見てください。

+0

ありがとうございます。すべてのシリアライザでjsonエラーを返す方法はありますか? – Amir

+0

シリアライザが有効でない場合は、発生したエラーを返します。シリアライザに遭遇したがっているものがあれば、シリアライザで 'validate'メソッドをオーバーライドすることができます。 –

+0

ありがとう、私はそれを見ます – Amir

関連する問題