Django--反序列化器的保存

本文详细介绍了如何使用Django Rest Framework(DRF)的序列化器进行数据的保存操作,包括创建(create)和更新(update)数据库记录的过程。通过实例演示了在验证数据成功后,如何基于validated_data调用create()和update()方法来完成数据库对象的创建或更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保存数据

验证成功之后把数据传入数据库中进行保存,要基于validated_data完成数据库对象的创建,此时永达create()和update()方法实现

定义create()和update()方法

    def create(self, validated_data):
        """
        新建 create
        validated_data内置参数
        被序列化器中的save()调用的  通过两个参数不同来判断是create()还是update()
        :return 模型类对象
        """
        return BookInfo.objects.create(**validated_data)  #此处指明create方法,如果出错,数据将存不到数据库

    def update(self,instance,validated_data):
        """
        更新
        :param instance: 要更新的实例化模型类对象
        :param validated_data:
        :return: 更新后的数据
        """
        instance.btitle = validated_data.get('btitle',instance.btitle)
        instance.bpub_date = validated_data.get('bpub_date',instance.bpub_date)
        instance.bread = validated_data.get('bread',instance.bread)
        instance.bcomment = validated_data.get('bcomment',instance.bcomment)
        instance.save()    #在返回对象时,把数据保存在数据库中
        return instance

验证结果:

>>> from booktest.serializers import BookInfoSerializer
>>> data = {'btitle':'白鹿原','bread':3232,'bpub_date':'1987-03-18','bcomment':232}
>>> s = BookInfoSerializer(data=data)   #没有传入instance实例,调用save()时实际上调用了create()
>>> s.is_valid()
True
>>> s.save()
<BookInfo: 白鹿原>

传入instance实例时调用update方法,无实例传入时调用的是create()方法

此时数据库中已经有相关数据了

>>> from booktest.models import BookInfo
>>> book = BookInfo.objects.get(id=2)    #先获取要修改的数据
>>> data = {'btitle':'天龙八八'}          #传入要修改的内容
>>> s = BookInfoSerializer(book,data=data)  #创建反序列化器   传入了instance实例化参数
>>> s.is_valid()          
True
>>> s.save()                            #此时save()调用的是update方法
<BookInfo: 天龙八八>
>>> book.btitle
'天龙八八'

刷新数据库就可以看到新的数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值