1. ContentType 是干什么用的呢:

1. ContentType: 主要的作用就是Django orm的创建表的时候,可以方便多表查询使用,简化多表查询的过程

2.ContentType 最主要的是有一个表内有多个字段映射不同的表的时候可以使用了
#最主要的其实就是一个数据表会经常变化,这样的话使用ContentType 组件,这样方便后期的修改和处理

2. ContentType的案例简单分析:

from django.db import models

# Create your models here.

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
###加载ContentType 需要的模块组件 class Course(models.Model): #创建一个course 课程的表,免费的
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32) #它自己的字段 # 不会在数据库中生成字段,只用于数据库操作
policy = GenericRelation(to='PricePolicy') class DegreeCourse(models.Model): #创建一个收费的课程表
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
# 它自己的字段
policy = GenericRelation(to='PricePolicy') class PricePolicy(models.Model): #对应2个课程表的价格和学习的周期时间
id=models.AutoField(primary_key=True)
period=models.IntegerField()
price=models.DecimalField(max_digits=8,decimal_places=2) object_id=models.IntegerField() #这个就是精髓 这里的变量取值为object_id #不要加引号,因为文件里已经加载好了,不需要to=ContentType 加引号
content_type=models.ForeignKey(to=ContentType,null=True) #这个就是精髓 这里的变量取值为content_type # 引入一个字段,不会在数据库中创建,只用来做数据库操作
# content_obj = GenericForeignKey('content_type','object_id')
content_obj = GenericForeignKey() #以为上面2个变量赋值很巧妙, 所以这里GenericForeignKey()内不需要写内容了
使用一(给课程添加价格策略): 使用方法:
-给免费课django添加价格策略
course = models.Course.objects.get(pk=1)
ret = models.PricePolicy.objects.create(period=30, price=199.9, content_obj=course)
-给学位课程(python全栈开发)添加价格策略
degree_course = models.DegreeCourse.objects.get(pk=1)
ret = models.PricePolicy.objects.create(period=30, price=199.9, content_obj=degree_course)

使用一: 给课程添加价格策略

使用二:查询价格策略对应的课程:
price_policy = models.PricePolicy.objects.get(pk=1)
print(price_policy.content_obj)
使用三:通过课程获取价格策略
course = models.Course.objects.get(pk=1)
policy_list = couse.policy.all()

用contentType实现查询

# 查询所有价格策略,并且显示对应的课程名称
price_policy_list=models.PricePolicy.objects.all() #获取价格表的对象组
for price_policy in price_policy_list: #for 循环从列表组取出一个一个对象 print(price_policy.content_obj.name) #直接content_obj 可以多个表查询到想要的结果 # 查询django课程信息的所有价格策略
course=models.Course.objects.get(pk=1)
#policy_list 就是django这门课所有的价格策略对象
policy_list=course.policy.all()
for policy in policy_list:
print(policy.price) #查询python全栈开发的所有价格策略
degree_course=models.DegreeCourse.objects.get(pk=1)
policy_list=degree_course.policy.all()
for policy in policy_list:
print(policy.price)

使用contentType简单实现查询想要东西的代码

django 之 ContentType的使用的更多相关文章

  1. Django之ContentType组件

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

  2. python框架之Django(15)-contenttype模块

    假如有一个书城系统,需要给作者和书籍加上评论功能.如果给每个表单独建一个评论表,那么我们以后要扩展其它模块评论功能的时候,还需要随之新建一张评论表,会显得很冗余.对于这种情况,Django 给我们提供 ...

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

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

  4. Django之ContentType详解

    contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. models.py文件的表结构写好后,通过makemigr ...

  5. Django的ContentType框架django_conent_type

    Django包含了一个conenttype应用程序,记录了Django项目中安装的所有模型,为当前项目所有基于Django驱动的model提供了更高层次的抽象接口. 一.概述 ContentTypes ...

  6. Django中contenttype的应用

    content_type表将app名称与其中的表的关系进行保存 通过下边的示例来理解content_type的具体应用: models: from django.db import models fr ...

  7. django之contenttype

    平时开发过程中,我们会经常遇到这么一个类似的场景,比如 不同的课程,有不同的价格策略 不同的课程可使用不同的优惠券(满减券,通用券,专用券) 不同的评论区,支持的评论 就拿  不同的课程,有不同的价格 ...

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

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

  9. 【Django】ContentType组件

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

随机推荐

  1. java 线程理解

    import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util. ...

  2. EXCEL 批量添加单元格名称

    在EXCEL单元格的值填入想为其设置的名称之后,调整下述代码的begin_line,begin_column,end_line,end_column的值,执行此宏,可用于批量为单元格设置名称. (注: ...

  3. Python argparse用法

    import argparse import sys parser = argparse.ArgumentParser(description='this is for test.') parser. ...

  4. python通配符之glob模块

    转自:https://blog.csdn.net/dcrmg/article/details/78309469 官方链接:https://docs.python.org/3.6/library/glo ...

  5. 电路 - 基尔霍夫定律(KLL);节点流入电流等于流出电流。

    下面是我在学习STM32 中ADC测量电压,时候接触掉ADC的测量范围在0~3.3V 之间,不满足于实际使用,用于电路知识设计电压放大电路.(图片来自野火) 上面个的电路,可以等效出一个电路公式:(V ...

  6. [转]本文采用all-in-one(一体化的)安装OpenShift

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_21816375/article/details/73656494本文采用all-in-one( ...

  7. java注解篇

    @SuppressWarnings注解 该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. 允许您选择性地取消特定代码段(即,类或方法)中的警告.其中的想法是当您看到警告 ...

  8. Java 锁的学习

    个人学习整理,所有资料均来源于网络,非原创. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得 ...

  9. SMTP 协议

    SMTP 响应状态码 代码 说明 说明 211 System status, or system help reply 系统状态或显示系统帮助. 214 Help message 显示系统帮助,通常用 ...

  10. Group(), Groups(),& Groupdict() 用法

    group() 返回一个或多个匹配的字串.如果只有一个参数,结果只有单个字符串:如果有多个参数,结果是一个元组,元组里每一项对应一个参数.没有参数,group1默认是0(整个匹配串被返回).如果gro ...