Django:ContentType组件
一、项目背景
二、版本一
三、版本二
三、终极版(使用ContentType)
一、项目背景
luffy项目,有课程有学位课(不同的课程字段不一样),价格策略
问题:1.如何设计表结构,来表示这种规则
2.为专题课,添加三个价格策略
3.查询所有的价格策略,并且显示对应的课程名称
4.通过课程id,获取课程信息和价格策略
二、版本一
一个课程表,包含学位课和专题课,一个价格策略表,一对多关联
三、版本二
学位课表,专题课表,周末表,价格策略表(在价格策略表中加入多个FK跟课程表做关联):后期再加其他课程,可维护性差
三、终极版(使用ContentType)
通过Django提供的ContentType表,来构建
models层:
- from django.db import models
- from django.contrib.contenttypes.models import ContentType
- from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
- class Course(models.Model):
- title = models.CharField(max_length=32)
- # 不会在数据库中生成字段,只用于数据库操作
- # policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='contentType')
- class DegreeCourse(models.Model):
- title = models.CharField(max_length=32)
- class PricePolicy(models.Model):
- # 跟ContentType表做外键关联
- contentType = models.ForeignKey(to=ContentType)
- # 正数
- object_id = models.PositiveIntegerField()
- # 引入一个字段,不会在数据库中创建,只用来做数据库操作
- # content_obj = GenericForeignKey('contentType', 'object_id')
- period = models.CharField(max_length=32)
- price = models.FloatField()
views层:
- from app01 import models
- def test(request):
- import json
- # 方式一插入价格规则
- # ret=models.ContentType.objects.filter(model='course').first()
- # course=models.Course.objects.filter(pk=1).first()
- # print(ret.id)
- # models.PricePolicy.objects.create(period='30',price=100,object_id=course.id,contentType_id=ret.id)
- # 方式二插入价格规则
- # course=models.Course.objects.filter(pk=1).first()
- # # content_obj=course 会自动的把课程id放到object_id上,并且去ContentType表中查询课程表的id,放到contentType上
- # models.PricePolicy.objects.create(period='60',price=800,content_obj=course)
- # 增加学位课,价格规则
- # degreecourse = models.DegreeCourse.objects.filter(pk=1).first()
- # models.PricePolicy.objects.create(period='60', price=800, content_obj=degreecourse)
- # 查询所有价格策略,并且显示对应的课程名称
- # ret=models.PricePolicy.objects.all()
- # for i in ret:
- # print(i.price)
- # print(i.period)
- # # content_obj 就是代指关联的课程,或者学位课程的那个对象
- # print(type(i.content_obj))
- # print(i.content_obj.title)
- # 通过课程id,获取课程信息和价格策略
- course=models.Course.objects.filter(pk=1).first()
- print(course.policy.all())
Django:ContentType组件的更多相关文章
- python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- Django ContentType组件
ContentType组件 引入 现在我们有这样一个需求~我们的商城里有很多的商品~~节日要来了~我们要搞活动~~ 那么我们就要设计优惠券~~优惠券都有什么类型呢~~满减的~折扣的~立减的~~ 我们对 ...
- vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件
vue中创建路由 每一个vue组件都有三部分组成 template:放html代码 script:放js相关 style:放css相关 vue中创建路由 1.先创建组件 Course.vue 2.ro ...
- Django content-type组件
介绍 Django包含一个contenttypes应用程序(app),可以跟踪Django项目中安装的所有模型(Model),提供用于处理模型的高级通用接口. Contenttypes应用的核心是Co ...
- Django之ContentType组件
一.理想表结构设计 1.初始构建 1. 场景刚过去的双12,很多电商平台都会对他们的商品进行打折促销活动的,那么我们如果要实现这样的一个场景,改如何设计我们的表? 2. 初始表设计 注释很重要,看看吧 ...
- Django组件(五) Django之ContentType组件
基础使用 -contenttype组件 -django提供的一个快速连表操作的组件,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中. 当我们的项目做数据迁移后,会 ...
- ContentType组件,Django缓存机制,跨域请求
ContentType组件 解决什么问题:表的id和数据id,来唯一确定一条数据 用: 插入数据: models:content_obj = GenericForeignKey('table_id', ...
- contenttype组件、Django缓存机制以及跨域请求
1 昨日回顾 版本控制 *** (1)url=127.0.0.1/course/?version=v100000 1 versioning_class=QueryParameterVersioning ...
- Django day31 contentType组件,Django的缓存
一.contentType组件 1.干什么用的? 是一个django内置的一个组件,方便我们快速的连表操作 2.这两个字段都不会在数据库中生成,他只是用来查询,插入的 -在course表中: poli ...
- 【Django】ContentType组件
目录 理解 表结构 使用 @ 好,现在我们有这样一个需求,我们的商城里有很多的商品,然而节日要来了,我们要搞活动. 那么,我们就要设计优惠券,优惠券都有什么类型呢?满减的.折扣的.立减的.等等等... ...
随机推荐
- 小程序报错 thirdScriptError
thirdScriptError sdk uncaught third Error Unexpected token export SyntaxError: Unexpected token expo ...
- skywalking 链路式跟踪
wget http://mirror.bit.edu.cn/apache/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gzwget https:/ ...
- JAVA 读取xml格式的数据
<?xml version="1.0" encoding="UTF-8"?> <column-enums> <type name= ...
- jquery获取父,同,子级元素
一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir& ...
- win10 linux Ubuntu 18.04更换国内源
安装了win10的linux bash 版本为ubuntu 18.04 首先查询自己的linux版本信息 cat /etc/issue 然后对系统的镜像源文件进行备份,再修改镜像源文件/etc/a ...
- springboot的propteis的基本配置参考
其中mybatis.cfg.xml文件可以不加,这个文件最主要是开启mybatis的二级缓存:
- ASP.NET Core四大部件
四大部件 (WebHost,Startup,launchSettings,wwwroot) WebHost 简单理解是一个socket, https://www.cnblogs.com/neverc/ ...
- git config 介绍
转载. https://blog.csdn.net/liuxiao723846/article/details/83113317 Git的三个重要配置文件分别是/etc/gitconfig,${HOM ...
- Git--远程仓库版本回退方法
Git--远程仓库版本回退方法 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的 ...
- 公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS
作者: yoyoso https://my.oschina.net/ioslighter/blog/359207 对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个: 加密--公钥 看 ...