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

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

用外键是可以将课程表和价格策略表关联起来的,但是在后面对表数据的操作起来会非常的复杂,所以我们可以使用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. mysql 数据库新增用户

    1.user表中host为%含义: Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1.这里的意思就是说root用户只能通过192.168.1.1的客户 ...

  2. onkeypress,onkeyup,onkeydown区别

    onkeypress 这个事件在用户按下并放开任何字母数字键时发生.系统按钮(例如,箭头键和功能键)无法得到识别. onkeyup 这个事件在用户放开任何先前按下的键盘键时发生. onkeydown ...

  3. 基于bootstrap动态分页

    bootstrap本身的分页有分页组件 但是却是静态的,无法满足要求,分页必须根据当前的总页数来展示 使用插件bootstrap-paginator github下载地址 https://github ...

  4. P1338 末日的传说

    题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...

  5. P1368 工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  6. jsp电子商务购物车之四 数据库存储篇

    为了方便用户下次登录,仍然可以看到自己的购物车内容,所以,需要在数据库存储相应的购物车项目,本处增加购物车项表;uid和bid是复合主键. package com.cart.entity; //购物车 ...

  7. string 类型转换

    string转int "; int n = atoi(str.c_str()); cout << n << endl; int转string #include < ...

  8. json 串转成 java 对象再拼接成前台 html 元素

    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...

  9. 洛谷P1346 电车

    P1346 电车 236通过 757提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 解不好啊,快疯了!!哪位大… 求解:为何除了-1的点之 ...

  10. angular-translate加载.json文件进行翻译

    这是这个demo的目录结构,总共有两个文件:locale-chinese.json和translation11.html locale-chinese.json文件的内容是: { "beau ...