drf中序列化器的create和update

保存数据

验证成功之后把数据传入数据库中进行保存,要基于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
————————————————
版权声明:本文为CSDN博主「gy_98」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42684307/article/details/81067523

验证结果:

>>> 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()

————————————————
版权声明:本文为CSDN博主「gy_98」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42684307/article/details/81067523

传入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

————————————————
版权声明:本文为CSDN博主「gy_98」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42684307/article/details/81067523

 

posted @ 2022-03-31 15:51  Jaetyn  阅读(466)  评论(0编辑  收藏  举报