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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 10,908评论 0 24
  • 重点内容回顾-DRF 文章共: 4391字 4图预计阅读时间: 15分钟 每日分享 Overthinking r...
    小闫同学啊阅读 823评论 0 7
  • Serializers 序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型,然后可...
    lkning阅读 1,045评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,423评论 0 9
  • 随着生活节奏加快 我们的内心也愈加浮躁 经常会发一些“无名火” 可人是不会无缘无故愤怒的 我们之所以跟人生气 往往...
    wty_1219桐雨阅读 131评论 0 2