Django rest-framework框架-content-type
表结构讨论:
是用一张表价格策略表来记录两种不同的价格策略
content-type原理:
使用一张表来记录不同课程的价目,增加一行表名称
注释: 适用于多张表关联一张表的情况
会自动生成这种的结构:
- content_type: Django内置的一个组件, 帮助开发者做连表操作
- 连表操作: 普通的又 ForeignKey,OneToOne, ManyToMany
- 高级连表操作: content_type
- 第一版: 普通方式来生成这种表关联
- class Course(models.Model):
- """普通课"""
- title = models.CharField(max_length=32)
- class DegreeCourse(models.Model):
- """学位课"""
- title = models.CharField(max_length=32)
- class PricePolicy(models.Model):
- """价格策略"""
- price = models.IntegerField()
- period = models.IntegerField()
- table_name = models.CharField(verbose_name="关联的表名称")
- object_id = models.CharField(verbose_name="关联的表中的数据行ID")
- 第二版: 利用contentype来做多表关联
- from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
- from django.contrib.contenttypes.models import ContentType
- class Course(models.Model):
- """普通课"""
- title = models.CharField(max_length=32)
- # 用于反向查找
- price_policy_list = GenericRelation("PricePolicy")
- class DegreeCourse(models.Model):
- """学位课"""
- title = models.CharField(max_length=32)
- # 用于反向查找
- price_policy_list = GenericRelation("PricePolicy")
- class PricePolicy(models.Model):
- """价格策略"""
- price = models.IntegerField()
- period = models.IntegerField()
- #关联到ContentType表
- table_name = models.ForeignKey(ContentType, verbose_name="关联普通课表或者学位课表")
- object_id = models.IntegerField(verbose_name="关联普通课表或者学位课表中的数据行ID")
- #1. 为学位课PYTHON全栈 添加一个价格策略 一个月 9.9
- #obj = DegreeCourse.objects.filter(title="PYTHON全栈").first()
- #obj.id
- #cobj = ContentType.objects.filter(model = 'course').first()
- #cobj.id
- #PricePolicy.objects.create(price='9.9',period='30',content_type_id=cobj.id,object_id=obj.id)
- #以上操作用下面代替
- content_object = GenericForeignKey('content_type', 'object_id')
- # 添加view例子
- def test(request):
- #1. 为学位课PYTHON全栈 添加一个价格策略 一个月 9.9
- obj1 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
- PricePolicy.objects.create(price=9.9,period='一个月',content_type=obj1)
- obj2 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
- PricePolicy.objects.create(price=39.9,period='二个月',content_type=obj2)
- obj3 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
- PricePolicy.objects.create(price=59.9,period='三个月',content_type=obj3)
- #2. 根据课程ID获取课程, 并获取该课程的所有价格策略
- course = models.Course.objects.filter(id=1).first()
- price_policys = course.price_policy_list.all()
- return HttpResponse("添加成功")
Django rest-framework框架-content-type的更多相关文章
- Django REST framework框架介绍和基本使用
Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- Django Rest Framework框架 ---- url控制器
Django Rest Framework框架 ---- url控制器
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- Django Rest Framework框架源码流程
在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL.REST API . RESTFUL是所有Web应用都应该遵守的架构设计指导原则. REST是Repres ...
- Django rest framework框架中有哪些组件
认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由系统 视图 渲染器 认证 自定义认证的类 """ from rest_fram ...
- Django Rest framework 框架之解析器
解析器 序列化***** 请求数据进行校验 对queryset进行序列化处理 分页 路由 视图 渲染器
- Django rest framework框架——APIview源码分析
一.什么是rest REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP.其目标是为了创建具有良好扩展性的分布式系统. 可用一句话 ...
随机推荐
- Mat转CImage
uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址 ps=img.ptr<uchar>(i); void MatToCImage( Mat ...
- <JavaScript>使用onmousemove事件实现移动(拖拽)div 出现的关于offsetX的问题
出现的问题如下图所示(截屏看不出来看log) 再移动鼠标的过程中会不断的出现异常值导致拖动的div不断切换位置,回到左上角. 我以为是冒泡机制导致的所以添加了下面一段阻止冒泡,随便也阻止了默认事件,但 ...
- E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. 爆错解决办法
author :headsen chen date : 2019-06-06 10:09:06 root@ubuntu:~# apt-get remove java-1.8.0-openjdk E ...
- OSError: image file is truncated (28 bytes not processed)
解决办法: 在代码中添加两行 from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True
- ubuntu server 18.04 有线网卡默认关闭,需要手工配置才能使用的方法
1.安装完ubuntu server 18.04 后,笔记本电脑的有线网卡已经识别了,但是没有ip, 并且插上网线后端口灯不亮. 解决方法: 第一步.配置端口链路状态为 up # ip link se ...
- MySQL数据库之多线程备份工具mydumper
Mydumper介绍: 1)Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具 2)特性: 轻量级C语言编写 执行速度比mysqldump快10倍 快速的文件压缩 支持导 ...
- 微信小程序企业付款到个人
<?php /** * 小程序之企业付款到个人! */ class WxPayModel extends Model { public function sendMoneyToPerson($t ...
- pycurl模块
pycurl的使用 pycurl是curl的一个python版本. pycurl的使用说明: pycurl的使用主要是一些参数的设定. 1,c.setopt(pycurl.URL,myurl) 设定链 ...
- jsplumb实现流程图
流程图使用工具汇总 jsPlumb,开源软件,推荐使用,参考学习链接: jsplumb学习笔记.基本概念.中文简易教程 jTopo myflow Go.js JointJS,属于商业软件 mxGrap ...
- c# 结构体struct注意事项
c# 结构struct注意事项 1,不能定义无参构造函数,因为隐式的默认无参构造函数不能被重写 2,当为某个结构编写带有参数的构造函数时,必须显式初始化所有成员,否则编译不过. 3,不允许在结构的实例 ...