表结构讨论:

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

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的更多相关文章

  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. OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow

    1. EGL概述 EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现. EGL提供如 ...

  2. SpringCloud学习成长之路二 服务客户端(rest+ribbon)

    在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的. Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是f ...

  3. python 创建虚拟环境(virtualenv)

    原文地址:https://www.jianshu.com/p/2645d8f2e690 另附连接:Linux环境下虚拟环境virtualenv安装和使用 virtualenv 安装 1.Install ...

  4. .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?

    .rpt   是SAP Crystal Reports 製作出來的檔案的後綴名, 可以通過 SAP Crystal Reports Viewer 打開,也可以直接用記事本(notepad / Note ...

  5. selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用

    unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了 https://www.cnblogs.com/wuzhiming/p/8858305.html unit ...

  6. Unity与Android刘海屏适配

    本周学习Unity与Android刘海屏适配 关于刘海屏适配部分 网上有很多教程 这里只是做一下整理 https://blog.csdn.net/xj1009420846/article/detail ...

  7. 【ARM-Linux开发】Rico Board上编译USB WiFi RT3070驱动

    1.附件中提供了RT3070驱动源码包DPO_RT5572_LinuxSTA_2.6.1.3_20121022.tar.gz和编译好的驱动,这里选择使用taget_file.tar.gz中已经编译好的 ...

  8. Asp.net SignalR 实现服务端消息实时推送到所有Web端

    ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加 ...

  9. Python视频教程免费分享(2020年最新版)

    为期92天的全套Python视频教程免费分享,总计57G! 里面还有我的笔记,希望对大家有帮助哈~ 1-32天 … … 65-92天 百度云网盘: 链接: https://pan.baidu.com/ ...

  10. 【转帖】iPhone 11 Pro Max皇帝版物料成本不足3500元 卖一赚二

    iPhone 11 Pro Max皇帝版物料成本不足3500元 卖一赚二 https://www.cnbeta.com/articles/tech/894449.htm 供应链的掌控力很重要 苹果今年 ...