----------Django==2.0.2-----------

一、Django层级模型的定义

实例:(商品模型)

class GoodsCategory(models.Model):"""商品分类"""CATEGORY_TYPE = ((1, "一级类目"),(2, "二级类目"),(3, "三级类目"),)name = models.CharField('类别名',default="", max_length=30,help_text="类别名")code = models.CharField("类别code",default="", max_length=30,help_text="类别code")desc = models.TextField("类别描述",default="",help_text="类别描述")#目录树级别category_type = models.IntegerField("类目级别",choices=CATEGORY_TYPE,help_text="类目级别")# 设置models有一个指向自己的外键parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父类目级别", help_text="父目录",related_name="sub_cat")is_tab = models.BooleanField("是否导航",default=False,help_text="是否导航")add_time = models.DateTimeField("添加时间",default=datetime.now)class Meta:verbose_name = "商品类别"verbose_name_plural = verbose_namedef __str__(self):return self.name

注意

1、外键关联自己,关联模型必须是self,不能是模型名,否侧会报错

   如:parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父类目级别", help_text="父目录",related_name="sub_cat")

2、指定 related_name = ''  ,用于关联对象反向引用模型的名称(如序列化嵌套要用到)

二、Django序列化嵌套操作

class CategorySerializer3(serializers.ModelSerializer):'''三级分类'''class Meta:model = GoodsCategoryfields = ['name','code','desc','category_type','parent_category','is_tab','add_time']
#
class CategorySerializer2(serializers.ModelSerializer):'''二级分类'''sub_cat = CategorySerializer3(many=True)class Meta:model = GoodsCategoryfields = ['name','code','desc','category_type','parent_category','is_tab','add_time','sub_cat']class CategorySerializer(serializers.ModelSerializer):'''商品一级分类'''sub_cat= CategorySerializer2(many=True)class Meta:model = GoodsCategoryfields = ['name','code','desc','category_type','parent_category','is_tab','add_time','sub_cat']

注意:

1、序列化模型中最后一个分类要放在最前面定义

2、注意嵌套的时候一定要指定之前related_name里面的值,如: 'parent_category'  中的  related_name的值  ‘sub_cat’

3、另外除了最内层的字段不需要指定sub_cat字段,其他的序列化模型中必须指定sub_cat字段,另外fields中必须包含'sub_cat',否则会报错。

转载于:https://www.cnblogs.com/airapple/p/9237699.html

Django层级模型定义及序列化嵌套的方法相关推荐

  1. Django Rest Framework 1:序列化与反序列化

    文章目录 一,开发准备 1,创建django项目tutorial 2,创建应用snippet 3,安装DRF 4,配置settings.py 5,创建模型Snippet 6,数据迁移 二,使用 Ser ...

  2. Django MVT模型详解

    MVT模型详解 ORM简介 使用MySql数据库 开发流程 使用数据库生成模型类 Model 定义模型 定义属性 字段类型 字段选项 关系 元选项 示例演示 测试数据 类的属性 管理器Manager ...

  3. django 2 -----模型

    二.模型 模型使用步骤: 配置数据库 models.py定义模型类 激活模型 使用模型 Django默认使用的是sqlite,但在生产环境中一般会用mysql.postgrsql.oracle等关系型 ...

  4. 【Django】模型层说明

    [Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...

  5. Django框架(14.Django中模型类的关系,以及模型类关联查询)

    Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...

  6. Django框架(3.django设计模型类、模型类生成表、ORM框架简介)

    ORM框架简介 O是object,也就类对象的意思, R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思, M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进 ...

  7. Django models模型

    Django models模型 一. 所谓Django models模型,是指的对数据库的抽象模型,models在英文中的意思是模型,模板的意思,在这里的意思是通过models,将数据库的借口抽象成p ...

  8. MetaModelEngine:域模型定义

    每一个DSL的核心都是一个域模型,它定义了这一语言所代表的各种概念,以及这些概念的属性和它们之间的关系,在创建DSL每一个元素时都是使用域模型来描述.域模型还为语言的其他方面的建立提供了基础:图形符号 ...

  9. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

最新文章

  1. 智能物联网(AIoT,2020年)(上)
  2. java里锛是什么意思,java实验总结
  3. 机器学习特征筛选:方差选择法VarianceThreshold
  4. java删除第一个节点_访问单个节点的删除(Java)
  5. 【翻译】.NET 5 RC1发布
  6. QPW 公告表(tf_notice)
  7. 使用组策略禁止域用户运行特定软件名称的程序
  8. IOS端与Java端MD5加密方法
  9. 前端精英你是什么样的呢
  10. origin三维散点图_Origin 9按类别绘制散点图的方法
  11. mac虚拟机服务器设置u盘启动不了怎么办,苹果MacBook Air u盘启动不了怎么办?
  12. oracle 更新数据语句,数据更新语句update
  13. [ 八爪鱼使用经验] 爬取简单列表数据
  14. 【JSTL】choose标签
  15. 计算机模拟圣彼得堡游戏
  16. ClickHouse MergeTree二级索引/跳数索引
  17. 08|电商项目异地双活笔记
  18. Java常用加密解密算法全解
  19. 纸质文档转成电子档,30秒即可快速搞定(亲测有效)!
  20. mac(苹果电脑系统)关掉开机声音

热门文章

  1. 使用Postgrest快速创建数据库的OpenAPI接口
  2. windows 技术篇 - uispy 工具获取和使用,windows窗口属性快捷查看工具
  3. CTFshow 文件上传 web159
  4. 在Matlab符号计算中灵活运用assume
  5. randn--创建正态分布随机矩阵
  6. 有序的两个数组在满足其中一个数组的所有数都小于另外一个数组的情况下的整体的中位数
  7. (转载)The shortest, fastest, and easiest way to compare two tables in SQL Server: UNION
  8. linux必会命令 - 后台运行程序 - nohup、
  9. 4.方向-世界坐标系
  10. cordova 打包工具