一、项目背景

二、版本一

三、版本二

三、终极版(使用ContentType)

一、项目背景

  luffy项目,有课程有学位课(不同的课程字段不一样),价格策略

  问题:1.如何设计表结构,来表示这种规则

     2.为专题课,添加三个价格策略

     3.查询所有的价格策略,并且显示对应的课程名称

        4.通过课程id,获取课程信息和价格策略

二、版本一

  一个课程表,包含学位课和专题课,一个价格策略表,一对多关联

三、版本二

学位课表,专题课表,周末表,价格策略表(在价格策略表中加入多个FK跟课程表做关联):后期再加其他课程,可维护性差

三、终极版(使用ContentType)

通过Django提供的ContentType表,来构建

models层:

  1. from django.db import models
  2.  
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
  5.  
  6. class Course(models.Model):
  7. title = models.CharField(max_length=32)
  8. # 不会在数据库中生成字段,只用于数据库操作
  9. # policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='contentType')
  10.  
  11. class DegreeCourse(models.Model):
  12. title = models.CharField(max_length=32)
  13.  
  14. class PricePolicy(models.Model):
  15. # 跟ContentType表做外键关联
  16. contentType = models.ForeignKey(to=ContentType)
  17. # 正数
  18. object_id = models.PositiveIntegerField()
  19.  
  20. # 引入一个字段,不会在数据库中创建,只用来做数据库操作
  21. # content_obj = GenericForeignKey('contentType', 'object_id')
  22.  
  23. period = models.CharField(max_length=32)
  24. price = models.FloatField()

views层:

  1. from app01 import models
  2. def test(request):
  3. import json
  4. # 方式一插入价格规则
  5. # ret=models.ContentType.objects.filter(model='course').first()
  6. # course=models.Course.objects.filter(pk=1).first()
  7. # print(ret.id)
  8. # models.PricePolicy.objects.create(period='30',price=100,object_id=course.id,contentType_id=ret.id)
  9.  
  10. # 方式二插入价格规则
  11. # course=models.Course.objects.filter(pk=1).first()
  12. # # content_obj=course 会自动的把课程id放到object_id上,并且去ContentType表中查询课程表的id,放到contentType上
  13. # models.PricePolicy.objects.create(period='60',price=800,content_obj=course)
  14. # 增加学位课,价格规则
  15. # degreecourse = models.DegreeCourse.objects.filter(pk=1).first()
  16. # models.PricePolicy.objects.create(period='60', price=800, content_obj=degreecourse)
  17.  
  18. # 查询所有价格策略,并且显示对应的课程名称
  19. # ret=models.PricePolicy.objects.all()
  20. # for i in ret:
  21. # print(i.price)
  22. # print(i.period)
  23. # # content_obj 就是代指关联的课程,或者学位课程的那个对象
  24. # print(type(i.content_obj))
  25. # print(i.content_obj.title)
  26.  
  27. # 通过课程id,获取课程信息和价格策略
  28. course=models.Course.objects.filter(pk=1).first()
  29. print(course.policy.all())

Django:ContentType组件的更多相关文章

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

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

  2. Django ContentType组件

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

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

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

  4. Django content-type组件

    介绍 Django包含一个contenttypes应用程序(app),可以跟踪Django项目中安装的所有模型(Model),提供用于处理模型的高级通用接口. Contenttypes应用的核心是Co ...

  5. Django之ContentType组件

    一.理想表结构设计 1.初始构建 1. 场景刚过去的双12,很多电商平台都会对他们的商品进行打折促销活动的,那么我们如果要实现这样的一个场景,改如何设计我们的表? 2. 初始表设计 注释很重要,看看吧 ...

  6. Django组件(五) Django之ContentType组件

    基础使用 -contenttype组件 -django提供的一个快速连表操作的组件,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中. 当我们的项目做数据迁移后,会 ...

  7. ContentType组件,Django缓存机制,跨域请求

    ContentType组件 解决什么问题:表的id和数据id,来唯一确定一条数据 用: 插入数据: models:content_obj = GenericForeignKey('table_id', ...

  8. contenttype组件、Django缓存机制以及跨域请求

    1 昨日回顾 版本控制 *** (1)url=127.0.0.1/course/?version=v100000 1 versioning_class=QueryParameterVersioning ...

  9. Django day31 contentType组件,Django的缓存

    一.contentType组件 1.干什么用的? 是一个django内置的一个组件,方便我们快速的连表操作 2.这两个字段都不会在数据库中生成,他只是用来查询,插入的 -在course表中: poli ...

  10. 【Django】ContentType组件

    目录 理解 表结构 使用 @ 好,现在我们有这样一个需求,我们的商城里有很多的商品,然而节日要来了,我们要搞活动. 那么,我们就要设计优惠券,优惠券都有什么类型呢?满减的.折扣的.立减的.等等等... ...

随机推荐

  1. 小程序报错 thirdScriptError

    thirdScriptError sdk uncaught third Error Unexpected token export SyntaxError: Unexpected token expo ...

  2. skywalking 链路式跟踪

    wget http://mirror.bit.edu.cn/apache/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gzwget https:/ ...

  3. JAVA 读取xml格式的数据

    <?xml version="1.0" encoding="UTF-8"?> <column-enums> <type name= ...

  4. jquery获取父,同,子级元素

    一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir& ...

  5. win10 linux Ubuntu 18.04更换国内源

    安装了win10的linux bash 版本为ubuntu 18.04 首先查询自己的linux版本信息 cat /etc/issue   然后对系统的镜像源文件进行备份,再修改镜像源文件/etc/a ...

  6. springboot的propteis的基本配置参考

    其中mybatis.cfg.xml文件可以不加,这个文件最主要是开启mybatis的二级缓存:  

  7. ASP.NET Core四大部件

    四大部件 (WebHost,Startup,launchSettings,wwwroot) WebHost 简单理解是一个socket, https://www.cnblogs.com/neverc/ ...

  8. git config 介绍

    转载. https://blog.csdn.net/liuxiao723846/article/details/83113317 Git的三个重要配置文件分别是/etc/gitconfig,${HOM ...

  9. Git--远程仓库版本回退方法

    Git--远程仓库版本回退方法 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的 ...

  10. 公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

    作者: yoyoso https://my.oschina.net/ioslighter/blog/359207 对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个: 加密--公钥 看 ...