Django 如何通过DRF返回自定义状态代码?

Django 如何通过DRF返回自定义状态代码?,django,django-rest-framework,Django,Django Rest Framework,如果用户发送一个POST请求来创建一个作业,但该作业已经存在,那么我将尝试返回一个202 相反,它返回了一个400 观点 序列化程序 class CreateJobSerializer(GenericSerializer): class Meta: model = Job fields = ('name') def create(self, validated_data): try: obj = Job.o

如果用户发送一个POST请求来创建一个作业,但该作业已经存在,那么我将尝试返回一个202

相反,它返回了一个400

观点

序列化程序

class CreateJobSerializer(GenericSerializer):
    class Meta:
        model = Job
        fields = ('name')

    def create(self, validated_data):
        try:
            obj = Job.objects.create(**validated_data)
            return obj
        except:
            return Response(serializer.errors, status=status.HTTP_202_ACCEPTED)
如果在该模型上违反unique=true,我假设Job.objects.create将失败,如果是这种情况,我希望返回202。我做错了什么

这是因为在验证过程中实际捕获到unique=true错误,因此从未真正调用create吗?

我认为您可以在这种情况下使用您想要的202状态进行自定义响应

我还没有试过,但这可能有用:

try:
    if (serializer.is_valid(raise_exception=True)):
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as msg:
    if str(msg) == "This Email is already taken":
        return Response(
            {'ValidationError': str(msg)},
            status=status.HTTP_202_ACCEPTED
        )
    else:
        return Response(
            {'ValidationError': str(msg)},
        status=status.HTTP_400_BAD_REQUEST
        )

msg来自哪里?它是我保存异常的变量。这与msg的ValidationError相同,但在较早版本的python中除外。我更改了代码。我认为这不起作用-我不认为我得到过验证错误,我得到的是非字段错误
try:
    if (serializer.is_valid(raise_exception=True)):
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as msg:
    if str(msg) == "This Email is already taken":
        return Response(
            {'ValidationError': str(msg)},
            status=status.HTTP_202_ACCEPTED
        )
    else:
        return Response(
            {'ValidationError': str(msg)},
        status=status.HTTP_400_BAD_REQUEST
        )