zoukankan      html  css  js  c++  java
  • django drf 深入ModelSerializer

    serializer用起来稍微麻烦,可以使用ModelSerializer,类似于django里的Form与ModelForm

    1.定义ModelSerializer

    from rest_framework import serializers
    from goods.models import Goods, GoodsCategory
    
    
    # class GoodsSerializer(serializers.Serializer):
    #     """
    #     Goods的serializer
    #     """
    #     name = serializers.CharField(required=True, max_length=100)
    #     chick_num = serializers.IntegerField(default=0)
    #     # goods_front_image = serializers.ImageField()
    #     # 外键需要写数据里的字段名,不能写类里的字段名,例如不能写category,需要些category_id,请求时也得时数据库里的名
    #     category_id = serializers.IntegerField()
    #
    #     """
    #     创建
    #     """
    #     def create(self, validated_data):
    #         return Goods.objects.create(**validated_data)
    
    class CategorySerializer(serializers.ModelSerializer):
        class Meta:
            model = GoodsCategory
            fields = '__all__'
    
    
    # 优点:解决上面的category_id外键问题
    class GoodsSerializer(serializers.ModelSerializer):
        """
        Goods的serializer
        """
        # 自定义,可以获取到外键数据
        # read_only表示只用在获取数据
        category_obj = CategorySerializer(source='category',read_only=True)
        category_name = serializers.CharField(source='category.name',read_only=True)
        class Meta:
            model = Goods
            # 外键写类里的名就可以
            # fields = ('name','chick_num','category')
            fields = '__all__'

    2.View引用

    from django.shortcuts import render
    
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    from rest_framework.parsers import JSONParser
    
    from goods.models import Goods
    from goods.serializer import GoodsSerializer
    
    
    class GoodsList(APIView):
    
        def get(self, request):
            goods = Goods.objects.all()[:10]
            goods_json = GoodsSerializer(goods, many=True)
            # print(type(goods_json))
            # print(type(goods_json.data))
            return Response(goods_json.data)
    
        def post(self, request):
            serializer = GoodsSerializer(data=request.data) # 不管是form或是json,post过来的数据,都可以通过request.data获取
            if serializer.is_valid():
                serializer.save()
                return Response({'data': 'ok'}, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    3.test

  • 相关阅读:
    【OpenCV入门指南】第一篇 安装OpenCV
    java.lang.Math中的基本方法
    padding与margin的差别
    怎样做到从程序猿到管理者的跳跃
    秒杀多线程第四篇 一个经典的多线程同步问题
    NETSH WINSOCK RESET这条命令的含义和作用?
    如何在windows系统自带命令查看硬件信息?
    centos6.5 无线网卡配置
    ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc
    lsof 拥有更多的功能
  • 原文地址:https://www.cnblogs.com/chenyishi/p/10654087.html
Copyright © 2011-2022 走看看