提示:最好打开项目复制代码,跟着一步一步操作可以更好理解,如果想快速了解可直接跳到总结
前言
关于Django中rest_framework的ModelSerializer和serializers中的save的用法大家肯定有一些问题,这篇文章可以带大家从源码上了解save的最基本的用法
一、save方法是什么?
sava方法可以对数据库进行添加和修改操作时可以省略大部分代码,例如:
原始代码:
models.Date.objects.create("数据")
save方法:
对象.save()
二、步骤
1.代码
urls.py:
from django.urls import path,re_path
from api import views#我项目的名字叫api,根据自己去改
urlpatterns = [
path('api/', views.DateView.as_view()),]
models.py:
class Date(models.Model):
name = models.CharField(verbose_name="名字",max_length=10,)
age= models.IntegerField(verbose_name="年纪")
title= models.CharField(max_length=255, verbose_name="标题")
from api import models
from django.views import View
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import serializers
class DateView(APIView):
def post(self, request, *args, **kwargs):
ser=DateSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.validated_data)
else:
print(ser.errors)#验证失败的信息
return Response("...")
2.serializers中的save
代码如下(示例):
View.py:
class DateSerializer(serializers.Serializer):
name = serializers.CharField()
age = serializers.IntegerField()
title = serializers.CharField()
这里可以CTRL+鼠标左键点击class DateView中的save方法
我们可以知道save方法是在serializers里,这里代码我不仔细分析,下滑找到
调用save方法,会调用update或者create方法,功能分别是修改和创造,所以我们CTRL+鼠标左键点击这两个方法看
可知在serializers并没有写这两个方法,所以我们想在serializers里面使用save方法的话我们就可以改成这样
class DateSerializer(serializers.Serializer):
name = serializers.CharField()
age = serializers.IntegerField()
title = serializers.CharField()
def create(self, validated_data):
return models.Date.objects.create(**validated_data)
我们重新写这个create方法(updata也一样,里面的instance参数可以理解为你要修改的数据的ID),就可以调用save的这个功能
3.ModelSerializer中的save方法
注意:在这里把DateSerializer这个类修改一下
代码如下(示例):
View.py:
class DateSerializer(serializers.ModelSerializer):
class Meta:
model = models.Date
fields = "__all__"
有一定的Django基础可以知道ModelSerializer和Serializer的区别,与Form和ModelForm的区别非常相似,ModelSerializer和Serializer的save方法基本一模一样,进入ModelSerializer发现ModelSerializer继承Serializer,所以整体方法两者非常相似,只是当执行update或者create方法时,以面向对象的知识点,会先到ModelSerializer里面找发现存在这两个方法
所以在ModelSerializer里面,直接就可以使用save,不需要重写create和update
总结
以上就是今天要讲的内容,本文仅仅简单介绍了ModelSerializer和Serializer的save的使用,在Serializer中要使用save方法的create和update的功能的话需要自己重写这两个方法,而ModelSerializer就提供了create和update的功能,可以直接用