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

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

用外键是可以将课程表和价格策略表关联起来的,但是在后面对表数据的操作起来会非常的复杂,所以我们可以使用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. [转]juery-zTree的基本用法

    [简介] zTree 是利用 jQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 ...

  2. 软工实践Beta冲刺(4/7)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...

  3. 轻量级权限管理系统——MVC基础

    Microsoft Web 开发平台

  4. XML序列化器读取XML数据

    PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到 ...

  5. HDU 1798 Tell me the area

    http://acm.hdu.edu.cn/showproblem.php?pid=1798 Problem Description     There are two circles in the ...

  6. Jboss6内存修改

    1.启动脚本:/home/jboss/jboss-eap-6.2/bin/standalone.sh -Djboss.bind.address.management=192.168.0.62 -Djb ...

  7. SSH答疑解惑系列(一)——spring容器是如何启动的

    SSH框架十分受欢迎,其中有一个原因就是spring可以和Struts2框架无缝整合.在使用spring时,无需手动创建web容器,而是通过配置文件声明式创建spring容器. 在web应用中,创建s ...

  8. hihocoder 1465 循环串匹配问题(后缀自动机)

    后缀自动机感觉好万能 tries图和ac自动机能做的,后缀自动机很多也都可以做 这里的循环匹配则是后缀自动机能做的另一个神奇功能 循环匹配意思就是S是abba, T是abb 问'abb', 'bba' ...

  9. 【算法】高斯消元&线性代数

    寒假作业~就把文章和题解3道题的代码扔在这里啦——链接: https://pan.baidu.com/s/1kWkGnxd 密码: bhh9 1.HNOI2013游走 #include <bit ...

  10. 我的emacs配置部分

    考场必记8行 (global-set-key (kbd "RET") 'newline-and-indent)//换行 (global-set-key (kbd "C-a ...