表结构讨论:

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

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. Java中运行动态脚本

    这里主要总结Java中集成Groovy的应用. Groovy可以与Java完美集成来扩展我们的应用,比如替代Java+jexl实现算式表达式计算或其它功能.在Ofbiz中也集成了Groovy来执行一些 ...

  2. pgpool 的配置文件详解

    listen_addresses = 'localhost' # Host name or IP address to listen on: # '*' for all, '' for no TCP/ ...

  3. Mac使用brew安装nginx,并解决端口80访问权限问题

    1.安装 brew install nginx 2.修改配置文件 sudo vi /usr/local/etc/nginx/nginx.conf 修改默认的8080端口为80 修改日志文件地方 err ...

  4. JS 判断用户设备 移动端或桌面端

    |)|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAg ...

  5. SIT测试 和 UAT测试

    在企业级软件的测试过程中,经常会划分为三个阶段——单元测试,SIT和UAT,如果开发人员足够,通常还会在SIT之前引入代码审查机制(Code Review)来保证软件符合客户需求且流程正确.下面简单介 ...

  6. Qt编写自定义控件59-直方动态图

    一.前言 直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较 ...

  7. spark 入门学习 核心api

    spark入门教程(3)--Spark 核心API开发 原创 2016年04月13日 20:52:28 标签: spark / 分布式 / 大数据 / 教程 / 应用 4999 本教程源于2016年3 ...

  8. Zabbix4.x 历史数据存储到Elasticsearch7.x

    一.简介 Zabbix 3.4.6 版本开始支持历史数据存储到 Elasticsearch, 早就想测试这个功能,最近有个需求需保存 zabbix 的历史数据上达十亿条,因此决定测试这功能的实用性,事 ...

  9. 【leetcode_easy】598. Range Addition II

    problem 598. Range Addition II 题意: 第一感觉就是最小的行和列的乘积即是最后结果. class Solution { public: int maxCount(int ...

  10. Python源码编译安装,supervisor配置管理

    apt-get remove 会删除软件包而保留软件的配置文件 apt-get purge 会同时清除软件包和软件的配置文件 virtualenv -p /usr/local/bin/python3. ...