django rest framework之三:序列化器

如果 我需要在序列化器 拿到数据的时候做保存(就行 forms 一样),可以在我们

创建好的 serializer 中重写 create 方法

from rest_framework import serializers



class ReatappSerializer(serializers.Serializer):

    name = serializers.CharField(required=True, max_length=100)

    click_num = serializers.IntegerField(default=0)


    # validated_data 会获取所有提交的字段

    def create(self, validated_data):

        # create(**validated_data) 方法会把提交的字段保存起来

        return Snippet.objects.create(**validated_data)

把用户提交过来的数据保存起来 (这里的流程和逻辑跟 forms 一样):

from .serializers import  SnippetSerializer

from rest_framework.views import APIView

from rest_framework.response import Response


class SnippetListView(APIView):


    def post(self, request, format=None):

        serializer = SnippetSerializer(data=request.data)

        # 如果数据验证成功

        if serializer.is_valid():

            # 保存数据,当调用 save 方法时,序列化器就会执行他的 create 方法。

            serializer.save()

            return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

也可以使用 ModelSerializer 对数据进行序列化, 这样代码更加精简

from rest_framework import serializers


class ReatappSerializer2(serializers.ModelSerializer):

    class Meta:

        model = Snippet # 对应我们 model 中的表

        # fields = ('name','click_num',) # 对指定字段进行序列化

        fields = "__all__" # 对所有字段进行序列化

此时父级保存的只是一个 id ,json 还没有嵌套,我要将所有数据都序列化 ,

将这个 id 对应的数据也显示进来,就可以进行序列化器的嵌套,

也就是在序列化器里面对父级 id 这个字段进行覆盖,把他换成一个序列化器的实例)

class CategorySerializer2(serializers.ModelSerializer):

    class Meta:

        model = Snippet

        fields = "__all__"



class ReatappSerializer2(serializers.ModelSerializer):

    Category = CategorySerializer2()


    class Meta:

        model = Snippet

        fields = "__all__"

此时就能看到级联关系

猜你喜欢

转载自blog.csdn.net/qq_26128879/article/details/82431576
今日推荐