Django-ContentType
背景:学位课、专题课、价格策略(每一种课程(学位课和专题课下可分为不同的种类的课程)在不同学习时间内的价格不同)
例如:如何将课程表与价格策略表关联起来:

用外键是可以将课程表和价格策略表关联起来的,但是在后面对表数据的操作起来会非常的复杂,所以我们可以使用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的更多相关文章
- python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- Django——ContentType及ContentType-signals的使用
一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...
- Django ContentType组件
ContentType组件 引入 现在我们有这样一个需求~我们的商城里有很多的商品~~节日要来了~我们要搞活动~~ 那么我们就要设计优惠券~~优惠券都有什么类型呢~~满减的~折扣的~立减的~~ 我们对 ...
- Django content-type 使用
1.models class PricePolicy(models.Model): """价格与有课程效期表""" content_type ...
- day70 csrf简单用法 &Django ContentType
一. 什么是跨站请求伪造 CSRF def transfer(request): if request.method =='POST': from_ =request.POST.get('from') ...
- Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用
一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...
- django contenttype 表应用
Django contenttypes 应用 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建 ...
- vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件
vue中创建路由 每一个vue组件都有三部分组成 template:放html代码 script:放js相关 style:放css相关 vue中创建路由 1.先创建组件 Course.vue 2.ro ...
- Django ContentType内置组件
一.引出问题 假如有这两张表,它们中的课程可能价格不一样.周期不一样.等等...不一样...,现在有一张价格策略表,怎么就用一张表报保存它们之间不同的数据呢? 可能你会这样: 确实是行!但是,如果有很 ...
- Django ContentType 的使用
引入 一切优化,最终都是关于需求的优化.本文介绍需求确定之后的数据库表结构设计优化. 程序员应该都知道,编程是数据结构和算法的结合.所谓数据就是用户需要访问和操作的资源,比如购物类App里面的商品,图 ...
随机推荐
- lintcode-51-上一个排列
51-上一个排列 给定一个整数数组来表示排列,找出其上一个排列. 注意事项 排列中可能包含重复的整数 样例 给出排列[1,3,2,3],其上一个排列是[1,2,3,3] 给出排列[1,2,3,4],其 ...
- html前端插件 ZenCoding 更名为Emmet
eclipse下的使用方法 http://www.educity.cn/develop/651853.html visualstudio下的使用方式 http://www.johnpapa.net ...
- 【历史】- UNIX发展史(BSD,GNU,linux)
先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...
- larbin之哈希之谈
由于工作原因,打算对larbin的源码进行分析一番 用的是2.6.3版本的larbin源码,由于这是业余,会断断续续的分析上传,已做记录笔记 今天我们分析一下larbin的哈希表 这个哈希表结构比较简 ...
- 算法(12)Best Time to Buy and Sell Stock II
题目:最大收益 [1,2,3,9,2,3] 思路:这道题竟然是easy的?! 最终的解法非常简单,只要把单个波峰减去波谷就可以了,比如在上面的例子中[1-2-3-9][2-3]这就是单个波峰波谷!为什 ...
- enter & keypress
enter & keypress https://stackoverflow.com/questions/905222/enter-key-press-event-in-javascript ...
- Git 删除服务器的远程分支
git push origin :分支名 可能会出现,在A机子操作,刷新下成功删除,但在B机子上还显示,再用下命令提示不存在该分支,只要再推送一个任意分支即可正常显示
- 【题解】SDOI2014数数
真的很开心呢,总算是有一道完完全全由自己做出来的题目啦~ 这一道题目洛谷P3311和另一道JSOI文本生成器的题目是十分相像的,dp方面几乎相同.只是<=n的约束,让这道题目必须结合数位dp的方 ...
- [NOI2017 D1T1]整数
题目大意:有一个整数 $x$ ,一开始为 $0$ .有 $n$ 个操作,有两种类型: $1 \;a\; b$:将 $x$ 加上整数 $a\cdot 2^b$ ,其中 $a$ 为一个整数, $b$ 为一 ...
- 部分经典IT书籍
部分经典IT书籍 [系统,网路管理]1) Learning the Unix Operating System 1565923901 O'reilly/1997-4ed ***强力推荐给想入门unix ...
