DRF一对多序列化和反序列化

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')

原文地址:https://www.cnblogs.com/wuxiaoshi/p/11723209.html

时间: 2024-08-30 14:22:15

DRF一对多序列化和反序列化的相关文章

DRF 一对多序列化与反序列化

DRF 一对多序列化与反序列化 序列化 出库的过程,是从数据库中把数据读出并以json的形式供前端使用 反序列化 入库的过程,是从前端将数据传入到views.py的函数或者类中,经过后台逻辑处理,最终写到数据库中. 安装 djangorestframework pip install djangorestframework 注册到INSTALL_APPS中 INSTALLED_APPS = [ ... 'rest_framework', ] 配置数据库 DATABASES = { 'defaul

DRF单表序列化和反序列化

安装 djangorestframework pip install djangorestframework 将rest_framework注册到app上 INSTALLED_APPS = [ 'rest_framework', 'app01' .... ] urls from django.urls import path from . import views urlpatterns = [ path('index/',views.UserView.as_view()) ] 在models.

DRF框架(三)——media资源路径设置、多表序列化(ModelSerializer)、多表反序列化、多表序列化与反序列化整合(重点)

media资源路径设置  (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 3.在urls.py路由设置 from django.views.static import serve from django.conf import settings urlpatterns =

drf序列化与反序列化

序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer. 例如,我们已有了一个数据库模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = models.DateField(

内部类,drf响应类,序列化与反序列化

内部类 # 概念:将类定义在一个类的内部,被定义的类就是内部类 # 特点:内部类及内部类的所以名称空间,可以直接被外部类访问的 # 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置),典型的Meta内部类 - 配置类 class Book(model.Model): class Meta: db_model = "owen_book" # 配置自定义表名 class BookSerializer(serializers.ModelSerializer): class M

利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScriptSerializer进行JSON序列化 注意:    是复杂对象. JSON是Javascript中常用的数据格

go语言之行--文件操作、命令行参数、序列化与反序列化详解

一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: 标准输入 os.Stdout: 标准输出 os.Stderr: 标准错误输出 读写示例: package main import ( "fmt" "os" ) var( username,password string ) func main() { fmt.Prin

Python 解析模块 异常模块 响应模块 序列化和反序列化组件

解析模块(后端根据指定的解析规则来解析前端发来的数据) 为什么要配置解析模块 1)drf给我们通过了多种解析数据包方式的解析类 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类,局部配置就是针对指定的视图来,让它们可以按照配置规则选择性解析数据 源码入口 # APIView类的dispatch方法中 request = self.initialize_request(request, *args, **kwargs) # 点进去 #

ModelSerializer 序列化和反序列化,及序列化整合

ModelSerializer 序列化序列化准备 - 模型层:models.pyfrom django.db import models # 1.基表模型类的封装(建立公有字段) class BaseModel(models.Model): is_delete = models.BooleanField(default=False) create_time = models.DateTimeField(auto_now_add=True) # 创建的时候更新时间 # 作为基表的model一定要加