Django休息框架 - 序列化器中的字段级验证

时间:2014-09-30 11:26:29

标签: django django-rest-framework

我有一个序列化程序,我试图添加字段级验证,我需要验证序列化的某些字段是否为空,以及布尔字段是真还是假。

我有这个序列化程序,但即使Ficha_publicada为假,我也永远不会返回错误

class PublicarSerializer(serializers.Serializer):

    Titulo = serializers.CharField(required=True)
    Ficha_publicada = serializers.BooleanField()

    def validate_Titulo(self, attrs, source):
        value = attrs[source]

        if not Ficha_publicada:
            raise serializers.ValidationError("Ficha no publicada")
        return attrs

    class Meta:
        model = Fichas

3 个答案:

答案 0 :(得分:5)

适用于Django rest framework 3.0及更新版本:

def validate_Titulo(self, value):

答案 1 :(得分:3)

使用attrs['Ficha_publicada']

if not attrs['Ficha_publicada']:
    raise serializers.ValidationError("Ficha no publicada")
return attrs

答案 2 :(得分:3)

对于Django 1.8,您需要使用稍微不同的方法签名。

来自(< 1.8) def validate_Titulo(self, attrs, source):

至(1.8) def validate_Titulo(self, attrs, source=None):

如果你没有在Django 1.8的None参数中添加默认的source,你会得到一个TypeError异常,说:

validate_Titulo()缺少1个必需的位置参数:' source'