Django反序列化验证

模型类

class GoodsInfo(models.Model):
    name = models.CharField(max_length=20)
    pub_date = models.DateField(verbose_name='发布时间', null=True)
    read_count = models.IntegerField(default=0, verbose_name='访问量')
    is_delete = models.BooleanField(default=False, verbose_name='删除,默认不删除')

    class Meta:
        db_table = 'goods'
        verbose_name_plural = '商品信息'

序列化程序

class GoodsInfoSerial(serializers.Serializer):
    id = serializers.IntegerField(label='主键ID', read_only=True)
    name = serializers.CharField(label='名称', max_length=20)
    pub_date = serializers.DateField(label='发布时间', required=False)
    read_count = serializers.IntegerField(label='访问量', required=False)

    # 现场级验证:通过向子类添加.validate_<field_name>方法来指定自定义字段级验证Serializer
    # def validate_name(self, value):
    #     if len(value) < 6:
    #         raise serializers.ValidationError('名称长度必须大于6')
    #     return value

    # 对象级验证:要执行需要访问多个字段的任何其他验证,
    # 请添加一个调用.validate()到Serializer子类的方法。
    # 此方法采用单个参数,该参数是字段值的字典。
    def validate(self, attrs):
        name = attrs['name']
        print('名称', name)
        if len(name) < 6:
            raise serializers.ValidationError('名称长度必须大于5')
        return attrs

    # 重写create方法
    def create(self, validated_data):
        obj = GoodsInfo.objects.create(**validated_data)
        return obj
    
    # 重写update方法
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.pub_date = validated_data.get('pub_date', instance.pub_date)
        instance.read_count = validated_data.get('read_count', instance.read_count)
        instance.is_delete = validated_data.get('is_delete', instance.is_delete)
        instance.save()
        return instance

使用python manage.py shell命令进入shell进行验证

from goods.serializers import GoodsInfoSerial
data = {'name': '1234'}
#序列化对象
ser1 = GoodsInfoSerial(data=data)
#验证
ser1.is_valid()
#验证没有错则保存
ser1.save()

验证失败
在这里插入图片描述
验证成功
在这里插入图片描述
django rest framework官方文档链接:
https://www.django-rest-framework.org/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值