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() 反 ...
随机推荐
- gRPC安装的小问题
INSTALL.md提到下述前提条件 #Pre-requisites ##Linux ```sh $ [sudo] apt-get install build-essential autoconf l ...
- 删除重复信息且要保留一条的(roacle的rowid另类用法)
由于表的主键失效了(disable),导致导入了一些主键重复的数据,想保留唯一的一条, 最后发现其实可以用rowid来实现,不知道算不算是rowid的另类用法. delete /*+ parallel ...
- DB2创建EMP和DEPT并进行基础操作
一.DB2创建EMP和DEPT测试表 --DB2创建测试表 CREATE TABLE TEST.EMP (EMPNO INTEGER NOT NULL, ENAME ), JOB ), MGR INT ...
- vue去掉链接中的#
在router.js中修改, const router = new VueRouter({ mode: 'history', routes: [...] })
- codeforces 1244E Minimizing Difference (贪心)
(点击此处查看原题) 题意分析 给出n个数,a1,a2...an,现在可以进行最多k次操作,每次操纵可以使得任意一个数自增或者自减,问经过最多k次操作后,n个数中的最大值-最小值最小为多少? 解题思路 ...
- php常用扩展有哪些
bcmath(精确数值处理) bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gettext hash icon ...
- 基于TCP 协议的socket 简单通信
DNS 服务器:域名解析 socket 套接字 : socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...
- Earth Wind and Fire CodeForces - 1148E (构造)
大意: $n$个石子, 第$i$个石子初始位置$s_i$, 每次操作选两个石子$i,j$, 要求$s_i<s_j$, 任取$d$, 满足$0\le 2d\le s_j-s_i$, 将$s_i,s ...
- 怎样监听HTTP请求的成功、失败与进行时
1. 监听请求成功: xhr.onload 2. 监听请求失败: xhr.onerror 3. 监听请求数据下载中: xhr.onprogress xhr.onload = function() { ...
- django websocket 实现后台日志在web端展示(+前端vue设置)
核心代码: @accept_websocket def get_log(req): if req.is_websocket(): print('收到websocket请求') with open(se ...