【问题标题】:Return errors as json django rest api以 json django rest api 形式返回错误
【发布时间】:2017-11-13 07:56:40
【问题描述】:

初学者警报。我使用 ListCreateAPIView 来列出和创建目的。每当我通过 api 创建时,它都会以 json 格式返回响应。

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

但如果出现重复 slug 或标题之类的错误,它会返回类似这样的错误

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

有没有办法以 json 格式返回这些错误。 我的看法

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)

【问题讨论】:

  • 请发帖Holiday模特。
  • 已添加假日模型。

标签: django django-rest-framework


【解决方案1】:

HolidaySerializer 中,在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

【讨论】:

  • 谢谢它的工作。有什么方法可以为所有序列化程序返回 json 错误。
  • 如果序列化器无效,它将返回它遇到的错误。如果您希望序列化程序遇到某些事情,那么您可以覆盖序列化程序中的validate 方法。
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 2021-04-08
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多