05 django组件:contenttype
1、django组件:contenttype
组件的作用:可以通过两个字段让表和N张表创建FK关系
1、专题课,学位课 如何关联 过期时间??
方法1:分别创建 专题课--过期时间表 、学位课--过期时间表

方法2:专题课,学位课对应到一张过期时间表

方法3:过期时间表与 学位课,专业课,or 其他课程,创建外键关系

2、models初始表结构

$ python manage.py makemigrations
$ python manage.py migrate

3、contenttype表



2、需求1:插入课程与过期时间
1、方法1:ContentType



2、方法2:GenericForeignKey
models表结构

不会生成数据库列

view视图


3、需求2 :根据价格策略查找对应的表和数据


4、需求3:查询过期时间和价格




5、contenttype组件的3件事

1张表跟多张表,动态的创建FK关系
2列实现多张表的FK
其他应用:
优惠券跟多张课程进行关联
公共评论表,与多张表进行关联
6、代码
django组件:contenttype
组件的作用:可以通过两个字段让表和N张表创建FK关系
models
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation class DegreeCourse(models.Model):
"""学位课程"""
name = models.CharField(max_length=128, unique=True)
course_img = models.CharField(max_length=255, verbose_name="缩略图")
brief = models.TextField(verbose_name="学位课程简介") class Course(models.Model):
"""专题课程"""
name = models.CharField(max_length=128, unique=True)
course_img = models.CharField(max_length=255) # 不会在数据库生成列,只用于帮助你进行添加和查询
policy_list = GenericRelation('PricePolicy') class PricePolicy(models.Model):
"""价格与课程有效期表"""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # 关联course or degree_course
object_id = models.PositiveIntegerField() # 不会在数据库生成列,只用于帮助你进行添加和查询
content_obj = GenericForeignKey('content_type','object_id') valid_period_choices = (
(1, '1天'),
(3, '3天'),
(7, '1周'),
(14, '2周'),
(30, '1个月'),
(60, '2个月'),
(90, '3个月'),
(180, '6个月'),
(360, '12个月'),
(540, '18个月'),
(720, '24个月'),
)
valid_period = models.SmallIntegerField(choices=valid_period_choices)
price = models.FloatField()
views
from django.shortcuts import render, HttpResponse
from django.contrib.contenttypes.models import ContentType
from app01 import models def test(request):
"""价格策略表中增加,查询"""
# 1.在价格策略表中添加一条数据
# 方法1
"""
models.PricePolicy.objects.create(
valid_period=7,
price=6.6,
content_type=ContentType.objects.get(model='course'),
object_id=1
)
""" # 方法2
"""
models.PricePolicy.objects.create(
valid_period=14,
price=9.9,
content_obj=models.Course.objects.get(id=1)
)
""" # 2.根据某个价格策略对象,找到他对应的表和数据,如:管理课程名称
'''
price = models.PricePolicy.objects.get(id=2)
print(price.content_obj.name) # 自动帮你找到
''' # 3、找到某个课程的所有价格策略
obj = models.Course.objects.get(id=1)
print(obj.policy_list.all()) for item in obj.policy_list.all():
print(item.id, item.valid_period, item.price) return HttpResponse('test...')
05 django组件:contenttype的更多相关文章
- Django组件content-type使用方法详解
前言 参考博客:https://www.zhangshengrong.com/p/zD1yQJwp1r/ 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开 ...
- Django之ContentType组件
一.理想表结构设计 1.初始构建 1. 场景刚过去的双12,很多电商平台都会对他们的商品进行打折促销活动的,那么我们如果要实现这样的一个场景,改如何设计我们的表? 2. 初始表设计 注释很重要,看看吧 ...
- Django 组件之 ----- content-type
Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...
- 19,django组件之contenttype(一)
django组件之contenttype(一) 方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变 ...
- Django:内置组件Content-Type
12.Django组件之Content_Type 1.帮助我们生成了一张表,里面有所有表名.这样不再自建表在表中填表名,用Foreignkey获取 2.为了让我们快速进入插入数据,填写一个字段Gene ...
- Django中content-type组件的使用
content-type组件 ContentType是Django的内置的一个应用,可以追踪项目的所有APP和model的对应关系,并记录在ContentTpe表中,当我们的项目做数据迁移后,会有很多 ...
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
- Django - 文件上传、Django组件 - 分页器(paginator)
一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...
- Django组件-cookie,session
昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...
随机推荐
- select示例
#include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include < ...
- JS利用async、await处理少见的登录业务逻辑
在用uniapp开发一个项目时,有这样一个需求:用户首次登录后,uniapp自动保存用户名密码,之后不管是再次打开项目(打开项目时登录状态已失效)还是 请求接口(接口返回登录失效)时,都会先自动默认的 ...
- mysql中比较实用的几个函数
1.曾有这样的需求: 可以使用如下函数: 语法:FIND_IN_SET(str,strlist). 定义: 1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间 ...
- 虚拟机(VM)安装openwrt-koolshare软路由
⒈创建虚拟机 **软路由选择Windows操作系统,因为我们需要在PE环境中进行软路由的写入,固件类型选择BIOS,网络类型选择使用仅主机模式网络,虚拟磁盘类型选择IDE[一定要选择IDE模式],SC ...
- pycharm配置git版本管理
1.下载并安装git 首先你电脑必须安装git版本控制器(软件),在官网下载即可 2.安装git,正常安装即可 编缉器的选择,根据电脑实际情况选择合适的编缉器 安装参考:https://www.cnb ...
- 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM
本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...
- 【思维】Kenken Race
题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...
- 一个下午整理的Web前端常见的英文缩写
PV (Page View)页面浏览量 FED(Front-End Development)前端开发 F2E(Front-End Engineer)前端工程师 WWW(World Wide Web)万 ...
- 客户想要的 vs 客户实际预算:漫画解读软件开发模式
转自:http://blog.jobbole.com/113230/ 1913 年,美利坚工业之神——亨利福特,发明了世界上第一条流水线,汽车工业从此进入了大规模生产的时代.丰田公司提出的丰田生产系统 ...
- ubuntu安装交叉编译器
# sudo apt-get install gcc-arm-linux-gnueabi # sudo apt-get install g++-arm-linux-gnueabi 官方下载 https ...