背景:学位课、专题课、价格策略(每一种课程(学位课和专题课下可分为不同的种类的课程)在不同学习时间内的价格不同)

例如:如何将课程表与价格策略表关联起来:

用外键是可以将课程表和价格策略表关联起来的,但是在后面对表数据的操作起来会非常的复杂,所以我们可以使用Django的ContentType组件来完成:

model.py

class Course(models.Model):
name=models.CharField(max_length=32,verbose_name="专题课程") class DegreeCourse(models.Model):
name=models.CharField(max_length=32,verbose_name="学位课程") class PricePolicy(models.Model): period=models.CharField(max_length=32,verbose_name="周期")
price=models.FloatField(verbose_name="价格")

得到表:

django_content_type表(可以用次表与价格策略表关联)

model.py  加入次字段即可关联PricePolicy表


from django.contrib.contenttypes.models import ContentType
class Course(models.Model):
name=models.CharField(max_length=32,verbose_name="专题课程") class DegreeCourse(models.Model):
name=models.CharField(max_length=32,verbose_name="学位课程") class PricePolicy(models.Model):
content_type=models.ForeignKey(ContentType)
object_id=models.PositiveSmallIntegerField() period=models.CharField(max_length=32,verbose_name="周期")
price=models.FloatField(verbose_name="价格")
PricePolicy表

关于链表查询

model.py

class Course(models.Model):
name=models.CharField(max_length=32,verbose_name="专题课程") class DegreeCourse(models.Model):
name=models.CharField(max_length=32,verbose_name="学位课程")
# 数据库不生成,只用于链表查询
policy_list = GenericRelation("PricePolicy") class PricePolicy(models.Model):
content_type=models.ForeignKey(ContentType)
object_id=models.PositiveSmallIntegerField(verbose_name="正整数") # 不在数据库中生成,只用于帮助你做数据操作
content_object=GenericForeignKey("content_type","object_id") period=models.CharField(max_length=32,verbose_name="周期")
price=models.FloatField(verbose_name="价格")

views.py

from .models import *
def index(request):
# 为专题课1添加2个价格策略
# course=Course.objects.get(id=1)
# PricePolicy.objects.create(period=10,price="19.2",content_object=course)
# PricePolicy.objects.create(period=20,price="119.2",content_object=course) # 显示所有的价格策略,并将其对应的课程名称显示。
# price_list=PricePolicy.objects.all()
# for obj in price_list:
# print(obj.content_object.id,obj.period,("天"),obj.content_object.name)
#1 10 天 7天python入门
# 1 10 天 7天python入门
# 1 20 天 7天python入门
# 2 10 天 21天python放弃
# 2 20 天 21天python放弃 # 给你课程ID,获取课程信息+该课程的所有价格策略
course_obj = Course.objects.get(id=2)
print(course_obj.id)
print(course_obj.name)
policy_list = course_obj.policy_list.all()
for item in policy_list:
print(item.price, item.period)
return HttpResponse("ok")
 

Django-ContentType的更多相关文章

  1. python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  2. Django——ContentType及ContentType-signals的使用

    一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...

  3. Django ContentType组件

    ContentType组件 引入 现在我们有这样一个需求~我们的商城里有很多的商品~~节日要来了~我们要搞活动~~ 那么我们就要设计优惠券~~优惠券都有什么类型呢~~满减的~折扣的~立减的~~ 我们对 ...

  4. Django content-type 使用

    1.models class PricePolicy(models.Model): """价格与有课程效期表""" content_type ...

  5. day70 csrf简单用法 &Django ContentType

    一. 什么是跨站请求伪造 CSRF def transfer(request): if request.method =='POST': from_ =request.POST.get('from') ...

  6. Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用

    一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...

  7. django contenttype 表应用

    Django contenttypes 应用 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建 ...

  8. vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件

    vue中创建路由 每一个vue组件都有三部分组成 template:放html代码 script:放js相关 style:放css相关 vue中创建路由 1.先创建组件 Course.vue 2.ro ...

  9. Django ContentType内置组件

    一.引出问题 假如有这两张表,它们中的课程可能价格不一样.周期不一样.等等...不一样...,现在有一张价格策略表,怎么就用一张表报保存它们之间不同的数据呢? 可能你会这样: 确实是行!但是,如果有很 ...

  10. Django ContentType 的使用

    引入 一切优化,最终都是关于需求的优化.本文介绍需求确定之后的数据库表结构设计优化. 程序员应该都知道,编程是数据结构和算法的结合.所谓数据就是用户需要访问和操作的资源,比如购物类App里面的商品,图 ...

随机推荐

  1. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  2. 如何在tracepoint上注册函数

    register_trace_##name宏中 tracepoint_probe_register在这个函数中在同一个cp上可以挂多个处理函数, 查看函数:trace_block_rq_issue中定 ...

  3. 【bzoj4236】JOIOJI STL-map

    题目描述 JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由“J.O.I” ...

  4. vb常用函数一览表

    常用内部函数 数学函数 函数 功能 示例 结果 说明 Abs(x) 绝对值 Abs(-50.3) 50.3   Exp(x) 自然指数 Exp(2) e^2 e(自然对数的底)的某次方 Fix(x) ...

  5. Visual Studio调试之断点技巧篇

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我 ...

  6. [Leetcode] text justification 文本对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  7. Bash 实例,第二部分

    我们先看一下处理命令行自变量的简单技巧,然后再看看 bash 基本编程结构. 接收自变量 在 介绍性文章 中的样本程序中,我们使用环境变量 "$1" 来引用第一个命令行自变量.类似 ...

  8. jquery 的相关 width 和 height 方法辨析

    width() 设置或返回元素的宽度(不包括内边距.边框或外边距). height() 设置或返回元素的高度(不包括内边距.边框或外边距). innerWidth() 返回元素的宽度(包括内边距). ...

  9. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  10. 【UVALive4685-Succession】树形DP

    http://acm.hust.edu.cn/vjudge/problem/14338 题意:给定一棵树,每个点有一个值,让你选择k个点,并且这k个点是连在一起的(从任意一个点出发,可以遍历完所有选择 ...