zoukankan      html  css  js  c++  java
  • DRF一对多序列化和反序列化

    • models.py

      # 商品分类
      class Category(models.Model):
          name = models.CharField(max_length=32)
      
      # 商品
      class Goods(models.Model):
          name = models.CharField(max_length=32)
          price = models.DecimalField(max_digits=9,decimal_places=2)
          cate = models.ForeignKey(to='Category',on_delete=models.CASCADE)
    • urls.py

      from django.urls import path,include
      from . import views
      urlpatterns = [
          path('goods/',views.GoodsView.as_view()),
      ]
    • seralizers.py

      # 序列化
      class GoodsSerializer(serializers.ModelSerializer):
          # 如果想查出分类名称 CharField(source='<本model中的外键>.<外键指向的model的相应属性>')
          cate_name = serializers.CharField(source='cate.name')
          class Meta:
              model=Goods
              fields = ('cate_name','name','price')
      
      # 反序列化
      class GoodsUnSerializer(serializers.Serializer):
          name = serializers.CharField(max_length=32)
          price = serializers.DecimalField(max_digits=9,decimal_places=2)
          cate = serializers.IntegerField()
      
          # 添加
          def create(self, data):
              return Goods.objects.create(
                  cate_id = data.pop('cate'),
                  **data
              )
          # 编辑
          def update(self,instance,data):
              return instance.update(
                cate_id = data.pop('cate'),
                  **data
              )
      
    • views.py

      class GoodsView(APIView):
        # 查询
          def get(self,request):
              goods = models.Goods.objects.all()
              gs = GoodsSerializer(goods,many=True)
              return Response(gs.data)
      
        # 添加
          def post(self,request):
              dic = {"name":"金丝猴","price":132,'cate':3}
              gs = GoodsUnSerializer(data=dic)
              if gs.is_valid():
                  gs.save()
                  return HttpResponse('ok')
              return HttpResponse('error')
      
          # 更新
          def put(self,request):
              obj = models.Goods.objects.filter(id=1)
              dic = {"name":"金丝猴123","price":234,'cate':2}
              gs = GoodsUnSerializer(obj,data=dic)
              if gs.is_valid():
                  gs.save()
                  return HttpResponse('put-ok')
              return HttpResponse('put-error')
  • 相关阅读:
    你能用多长时间停车?
    中国威胁论好像还挺严重的
    热爱生命
    lunix下shell脚本批量获取文件,批量修改文件内容
    sql数据操作的若干心得(二)向表中自动插入自增的ID
    Asp.net开发之旅动态产生控件
    Asp.net开发之旅GridView中嵌入DropDownList的一点心得
    Asp.net开发之旅开发环境
    Asp.net开发之旅简单的引用母版页
    Sql数据操作的若干心得
  • 原文地址:https://www.cnblogs.com/weiwuhu/p/12366424.html
Copyright © 2011-2022 走看看