1. create&&perform_create介绍
1. 1 介绍
# create
序列化器保存数据的方法
# perform_create
调用保存数据的方法
# perform_create 该方法就是一个serializer.save(),本质上就是调用create
1.2. 源码
def create(self, request, *args, **kwargs):
# 外部我们配置序列化器
serializer = self.get_serializer(data=request.data)
# 进行校验
serializer.is_valid(raise_exception=True)
# 进行创建
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
# serializer 就是实例化产生的序列化器对象
serializer.save()
serializer.data.get('xxx')
# 我们可以serializer.data去获取反序列化之后的数据,但有个注意点,如果需要保存的话,只能在保存之后才能获取数据
1.3 两者使用的场合
# create
就是用于保存数据,
# perform_create
用于在create保存的时候,想要传入自己的默认值,或者在保存前后进行一些逻辑判断
2. 案例
class CommentAPIView(ListAPIView, CreateAPIView):
"""获取更多评论&&保存评论视图"""
queryset = models.Comment.objects.all()
serializer_class = TextSerializer
def perform_create(self, serializer):
# 1.执行创建传入默认的数据
serializer.save(userinfo=self.request.user)
# 2.保存之后,获取反序列化(保存)之后的数据
print("serializer", serializer.data.get('topic'))