django 上下文管理器 get_context_data 使用

发布时间 2023-06-25 15:39:30作者: 輪滑少年

在Django中,序列化器(serializer)是用于处理数据的序列化和反序列化的类。而get_context_data()方法是用于获取视图上下文数据的方法。默认情况下,序列化器无法直接拿到get_context_data()中的内容。

如果你希望将get_context_data()中的内容传递给序列化器进行处理,可以通过以下几种方法实现:

  1. 将get_context_data()中的内容作为参数传递给序列化器的初始化方法。

例如,在视图中实例化序列化器时,将get_context_data()中的内容作为参数传递给序列化器的初始化方法。

class AaaList(APIView):


    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        pkgs = self.request.data.get('pkgs')
        context.update({
            'pkgs' :pkgs
        })
        return context

    def post(self,request):
        serializer = AaaSeriallizer(data=request.data,context = self.get_context_data())
        if serializer.is_valid():
            serializer.save()
            return Response()
        else:
            returnResponse()

在序列化器中使用

class AaaSeriallizer(serializers.ModelSerializer):

    class Meta:
        model = Aaa
        fields = '__all__'




    def create(self,validated_data):
        instance = Aaa.objects.create(**validated_data)
        uuid = instance.uuid
        context_data = self.context
        pkgs = context_data.get('pkgs')
        # 拿到pkgs在序列化器中做其他操作
        return instance