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')
  • 相关阅读:
    前端--页面提交重置功能
    ztree获取当前选中节点子节点id集合的方法(转载)
    sqlserver锁表、解锁、查看销表 (转载)
    解决前端文件修改后浏览器页面未更新的问题
    简单的上传文件
    如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
    设计模式--观察者模式
    WebService 学习
    学习quartz定时
    JS 中AJAX,Fetch,Axios关系
  • 原文地址:https://www.cnblogs.com/weiwuhu/p/12366424.html
Copyright © 2011-2022 走看看