表结构讨论:

是用一张表价格策略表来记录两种不同的价格策略

content-type原理:

使用一张表来记录不同课程的价目,增加一行表名称

注释: 适用于多张表关联一张表的情况

会自动生成这种的结构:

  1. content_type: Django内置的一个组件, 帮助开发者做连表操作
  2. 连表操作: 普通的又 ForeignKeyOneToOne ManyToMany
  3. 高级连表操作: content_type
  4.  
  5. 第一版: 普通方式来生成这种表关联
  6. class Course(models.Model):
  7. """普通课"""
  8. title = models.CharField(max_length=32)
  9.  
  10. class DegreeCourse(models.Model):
  11. """学位课"""
  12. title = models.CharField(max_length=32)
  13.  
  14. class PricePolicy(models.Model):
  15. """价格策略"""
  16. price = models.IntegerField()
  17. period = models.IntegerField()
  18.  
  19. table_name = models.CharField(verbose_name="关联的表名称")
  20. object_id = models.CharField(verbose_name="关联的表中的数据行ID")
  21.  
  22. 第二版: 利用contentype来做多表关联
  23. from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
  24. from django.contrib.contenttypes.models import ContentType
  25. class Course(models.Model):
  26. """普通课"""
  27. title = models.CharField(max_length=32)
  28. # 用于反向查找
  29. price_policy_list = GenericRelation("PricePolicy")
  30.  
  31. class DegreeCourse(models.Model):
  32. """学位课"""
  33. title = models.CharField(max_length=32)
  34. # 用于反向查找
  35. price_policy_list = GenericRelation("PricePolicy")
  36.  
  37. class PricePolicy(models.Model):
  38. """价格策略"""
  39. price = models.IntegerField()
  40. period = models.IntegerField()
  41. #关联到ContentType表
  42. table_name = models.ForeignKey(ContentType, verbose_name="关联普通课表或者学位课表")
  43. object_id = models.IntegerField(verbose_name="关联普通课表或者学位课表中的数据行ID")
  44.  
  45. #1. 为学位课PYTHON全栈 添加一个价格策略 一个月 9.9
  46. #obj = DegreeCourse.objects.filter(title="PYTHON全栈").first()
  47. #obj.id
  48. #cobj = ContentType.objects.filter(model = 'course').first()
  49. #cobj.id
  50. #PricePolicy.objects.create(price='9.9',period='30',content_type_id=cobj.id,object_id=obj.id)
  51. #以上操作用下面代替
  52. content_object = GenericForeignKey('content_type', 'object_id')
  53.  
  54. # 添加view例子
  55.  
  56. def test(request):
  57. #1. 为学位课PYTHON全栈 添加一个价格策略 一个月 9.9
  58. obj1 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
  59. PricePolicy.objects.create(price=9.9,period='一个月',content_type=obj1)
  60.  
  61. obj2 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
  62. PricePolicy.objects.create(price=39.9,period='二个月',content_type=obj2)
  63.  
  64. obj3 = DegreeCourse.objects.filter(title="PYTHON全栈").first()
  65. PricePolicy.objects.create(price=59.9,period='三个月',content_type=obj3)
  66.  
  67. #2. 根据课程ID获取课程, 并获取该课程的所有价格策略
  68. course = models.Course.objects.filter(id=1).first()
  69. price_policys = course.price_policy_list.all()
  70.  
  71. return HttpResponse("添加成功")

  

Django rest-framework框架-content-type的更多相关文章

  1. Django REST framework框架介绍和基本使用

    Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...

  2. Django Rest framework 框架之认证使用和源码执行流程

    用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...

  3. Django Rest Framework框架 ---- url控制器

    Django Rest Framework框架 ---- url控制器

  4. web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝

    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...

  5. web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍

    web前端Vue+Django rest framework 框架 生鲜电商项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...

  6. Django Rest framework 框架

    一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...

  7. Django Rest Framework框架源码流程

    在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL.REST API . RESTFUL是所有Web应用都应该遵守的架构设计指导原则. REST是Repres ...

  8. Django rest framework框架中有哪些组件

    认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由系统 视图 渲染器 认证 自定义认证的类 """ from rest_fram ...

  9. Django Rest framework 框架之解析器

    解析器 序列化***** 请求数据进行校验 对queryset进行序列化处理 分页 路由 视图 渲染器

  10. Django rest framework框架——APIview源码分析

    一.什么是rest REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP.其目标是为了创建具有良好扩展性的分布式系统. 可用一句话 ...

随机推荐

  1. Mat转CImage

    uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址 ps=img.ptr<uchar>(i); void MatToCImage( Mat ...

  2. <JavaScript>使用onmousemove事件实现移动(拖拽)div 出现的关于offsetX的问题

    出现的问题如下图所示(截屏看不出来看log) 再移动鼠标的过程中会不断的出现异常值导致拖动的div不断切换位置,回到左上角. 我以为是冒泡机制导致的所以添加了下面一段阻止冒泡,随便也阻止了默认事件,但 ...

  3. 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 ...

  4. OSError: image file is truncated (28 bytes not processed)

    解决办法: 在代码中添加两行 from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True

  5. ubuntu server 18.04 有线网卡默认关闭,需要手工配置才能使用的方法

    1.安装完ubuntu server 18.04 后,笔记本电脑的有线网卡已经识别了,但是没有ip, 并且插上网线后端口灯不亮. 解决方法: 第一步.配置端口链路状态为 up # ip link se ...

  6. MySQL数据库之多线程备份工具mydumper

    Mydumper介绍: 1)Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具 2)特性: 轻量级C语言编写 执行速度比mysqldump快10倍 快速的文件压缩 支持导 ...

  7. 微信小程序企业付款到个人

    <?php /** * 小程序之企业付款到个人! */ class WxPayModel extends Model { public function sendMoneyToPerson($t ...

  8. pycurl模块

    pycurl的使用 pycurl是curl的一个python版本. pycurl的使用说明: pycurl的使用主要是一些参数的设定. 1,c.setopt(pycurl.URL,myurl) 设定链 ...

  9. jsplumb实现流程图

    流程图使用工具汇总 jsPlumb,开源软件,推荐使用,参考学习链接: jsplumb学习笔记.基本概念.中文简易教程 jTopo myflow Go.js JointJS,属于商业软件 mxGrap ...

  10. c# 结构体struct注意事项

    c# 结构struct注意事项 1,不能定义无参构造函数,因为隐式的默认无参构造函数不能被重写 2,当为某个结构编写带有参数的构造函数时,必须显式初始化所有成员,否则编译不过. 3,不允许在结构的实例 ...