12.Django组件之Content_Type

1.帮助我们生成了一张表,里面有所有表名.这样不再自建表在表中填表名,用Foreignkey获取
2.为了让我们快速进入插入数据,填写一个字段GenericForeignKey,(不用生成字段)
3.为了让我们快速反向查找,通过添加字段GenericRelation,(仅仅用于反向查找,不生成字段)
  • 内置组件,用于帮助我们做连表操作.需求展示:
  • 学习商城分学位课和普通课,学位课有老师提供在线解答,在线解答每个月费用如下表.普通课程不提供在线解答,只提供视频.但观看视频每月需要办理会员.现将2个价格策略表,合成一张表,如下:

  • 但是如果又有新的服务:比如开了VVIP课程,那么价格策略表又增加一个字段.这样以后添加新服务就要修改表结构.不断更改表结构.这样并不好.

  • 修改如下方法更加好:

  • 这样以后无论增加什么样服务,只需增加字段.这种方式适用于一张表同时关联多张表.

  • 表的创建models.py:

from django.contrib.contenttypes.fields import GenericForeignKey
from django.db import models
from django.contrib.contenttypes.models import ContentType
# Create your models here. class Course(models.Model):
"""
普通课程
"""
title = models.CharField(max_length=32) class DegreeCourse(models.Model):
"""
学位课程
"""
title = models.CharField(max_length=32) class PricePolicy(models.Model):
"""
价格策略
"""
price = models.IntegerField()
period = models.IntegerField()
#ContentType会自己创建一张表,将所有表名称添加到该表中
content_type = models.ForeignKey(ContentType,verbose_name="关联普通课或学位课表")
object_id = models.IntegerField(verbose_name="关联普通课或学位课中的课程ID")
#帮助你快速实现content_type操作,会自定将
#obj = DegreeCourse.objects.filter(title="python全栈").first()
#GenericForeignKey能够帮助我们:从数据库获取该对象obj的id和此对象对应content_type表里面的id.赋值到该表的
#content_type和object_id
content_object = GenericForeignKey("content_type","object_id") #urls.py
url(r'^test/', views.test),
#views.py
from django.shortcuts import render,HttpResponse
from api import models
# Create your views here. def test(request):
""" """
#创建1个月的价格
obj1 = models.DegreeCourse.objects.filter(title="python全栈").first()
models.PricePolicy.objects.create(price=9.9,period=30,content_object=obj1)
#创建2个月的价格
obj2 = models.DegreeCourse.objects.filter(title="python全栈").first()
models.PricePolicy.objects.create(price=15.9, period=60, content_object=obj2)
#创建3个月的价格
obj3 = models.DegreeCourse.objects.filter(title="python全栈").first()
models.PricePolicy.objects.create(price=21.9, period=90, content_object=obj3)
return HttpResponse("200 OK")
  • 添加成功:

  • 快速反向查找:

#需要在models.py被查找的表中添加字段:
price_policy_list = GenericRelation("PricePolicy")#仅仅用于反向查找,不生成字段 #在views.py
#获取所有课程的价格策略:
dero = models.DegreeCourse.objects.fliter(id=1).frist()
price_policys=dero.price_policy_list.all()
#获取到每个价格对象.
print(price_policys)#<QuerySet [<PricePolicy: PricePolicy object>, <PricePolicy: PricePolicy object>, <PricePolicy: PricePolicy object>]>

Django:内置组件Content-Type的更多相关文章

  1. django内置组件——ContentTypes

    一.什么是Django ContentTypes? Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象 ...

  2. Vue基础(环境配置、内部指令、全局API、选项、内置组件)

    1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...

  3. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  4. Django内置Admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...

  5. Django内置模版过滤器

    Django内置过滤器总览 可以查询下表来总览Django的内置过滤器: 过滤器 说明 add 加法 addslashes 添加斜杠 capfirst 首字母大写 center 文本居中 cut 切除 ...

  6. 框架----Django内置Admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...

  7. Django内置信号

    阅读目录(Content) Django中内置的signal 自定义信号 1.定义信号 2.注册信号 3.触发信号 回到顶部(go to top) Django中内置的signal Django中提供 ...

  8. Django内置Admin解析

    Django 内置的admin是对于model中对应的数据表进行增删改查提供的组建 一.Django admin的内部依赖: 依赖的app django.contrib.auth django.con ...

  9. form-create教程:给内置组件和自定义组件添加事件

    本文将介绍form-create如何给内置组件和自定义组件添加事件 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue ...

随机推荐

  1. tig

    /******************************************************************************* * tig * 说明: * tig便于 ...

  2. 用shedlock实现分布式定时任务锁

    添加包 <dependency>     <groupId>net.javacrumbs.shedlock</groupId>     <artifactId ...

  3. XML External Entity Injection(XXE)

    写在前面 安全测试fortify扫描接口项目代码,暴露出标题XXE的问题, 记录一下.官网链接: https://www.owasp.org/index.php/XML_External_Entity ...

  4. HTML5中的Web Worker技术

    为了让后台程序更好的执行,在HTML5中设计了Web Worker技术.Web Worker的产生主要是考虑到在HTML4中JavaScript Web程序都是以单线程的方式执行的,一旦前面的脚本花费 ...

  5. 使用visual studio code运行html

    可以安装插件:open in browser 安装好插件后,编辑html网页的时候,右键多了两个菜单: 1.Open in Default Browser 2.Open in Other Browse ...

  6. Loadrunner查询博客列表并循环删除博客列表中的所有博客

    Loadrunner查询博客列表并循环删除博客列表中的所有博客,在博客列表请求中使用关联,获取出列表中博客的数量,并找出博客列表请求的必要参数.关联使用Ordinal=All 找出所有匹配值 查找出所 ...

  7. 一行命令搞定/usr/bin/perl^M: bad interpreter

    https://www.cnblogs.com/albertYe/p/8819143.html **************************************************** ...

  8. Mac下GoogleChromeHelper占用内存过高 的一个排查过程记录

    测试需要在Mac上装了个虚拟机,结果忘记限制资源了,直接崩溃重启过一次. 后面限制了一下资源,发现内存占用率还是特别高,其中最高的居然是Chrome相关的一个东西.这让我8G内存该如何是好. 于是查了 ...

  9. json 格式化处理工具

    json 格式化处理工具 用于JSON的快速命令行处理工具,简单无依赖. 我这边列举一些最常用的: 调试 http 请求时打印格式化后的数据 格式化本地或或流中的数据 获取 json 的键值或进行执行 ...

  10. Linux 修改用户的JDK版本

    1.  vi .bash_profile 2.复制以下到bash_profile 文件,并将此文件里原来的JAVA_HOME和PATH删掉 JAVA_HOME=/java/jdk1..0_22 JRE ...