美文网首页
DRF 在序列化器检查字段是否有效

DRF 在序列化器检查字段是否有效

作者: 思考的虫子 | 来源:发表于2019-04-23 11:20 被阅读0次

DRF 在序列化器检查字段是否有效

我所知道的几种方法:

  1. 在模型类中的 clean() 检查,最严格,确保数据库中的字段内容一定合法
  2. 在序列化器类中校验
  3. 在序列化器中针对特定的字段校验
  4. 在view中校验
    这里先写我试过的方法 2 和方法 3

2. 在序列化器类中校验

class ActionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Action
        fields = (
            'action', 'handler', 'action_at', 'qif', 'comment'
        )

    def validate(self, data):
        """
        validate 方法只有一个参数 data, 是所有字段的值
        由于 data 包含了所有字段的值,所以可以同时做多个条件判断,这里只做了一个
        """
        if data['qif'].status != enums.STATUS_ACCEPTED:
            raise serializers.ValidationError(
                "QIF has not been accepted by any handler yet."
            )
        return data

3. 在序列化器类中,针对字段校验

class ActionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Action
        fields = (
            'action', 'handler', 'action_at', 'qif', 'comment'
        )

     def validate_qif(self, value):
        """
        检查 qif 对象的状态,是否为 “已接受”
        """
        if value.status != enums.STATUS_ACCEPTED:
            raise serializers.ValidationError(
                "QIF has not been accepted by any handler yet."
        )
        return value

Reference

Field-level validation
Object-level validation

相关文章

网友评论

      本文标题:DRF 在序列化器检查字段是否有效

      本文链接:https://www.haomeiwen.com/subject/zdgmgqtx.html