在django rest api中覆盖或阻止验证错误

时间:2015-03-26 15:30:09

标签: django rest python-2.7 django-rest-framework

有没有办法在django rest框架中覆盖或阻止验证错误。例如,我有以下代码

class Function(models.Model):



name = models.CharField(max_length=30, unique=True)

我需要某种方法来阻止名称的唯一= True。如何在序列化器中处理它?<​​/ p>

class FunctionSerializerWithOnlyName(serializers.ModelSerializer):

def validate_name(self, value):
        # it is always returning name needs to be unique even if i raise another error
        return value


class Meta:
    model = Function
    fields = ( 'name',)

2 个答案:

答案 0 :(得分:0)

unique在数据库级别强制执行。 https://docs.djangoproject.com/en/1.7/ref/models/fields/#unique

..所以这是不可能的。您需要从模型字段中删除unique并检查代码中的唯一性。

答案 1 :(得分:0)

最快的方法是将FunctionSerializerWithOnlyName更改为serializers.Serializer并将其与Function对象取消链接。

class FunctionSerializerWithOnlyName(serializers.Serializer):

name = serializers.CharField(max_length=30)

def validate_name(self, value):
    try:
        function = Function.objects.get(name=value)
    except:
        raise serializers.ValidationError("The function name '"+value+"' is not available")
    return value