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')
  • 相关阅读:
    Lucene全文检索
    数据库设计样例
    tortoisegit 保存用户名密码
    ServletContextListener 解析用法
    !! 浅谈Java学习方法和后期面试技巧
    佳能2780打印机老出5100错误
    蓝屏
    股市口诀
    如何准确进行T+0操作
    通达信:显示K线图日期
  • 原文地址:https://www.cnblogs.com/weiwuhu/p/12366424.html
Copyright © 2011-2022 走看看