Django框架(二十七)—— ContentType组件

目录

  • ContentType组件

    • 一、什么是ContentType组件
    • 二、使用ContentType
    • 三、使用场景总结

ContentType组件

一、什么是ContentType组件

contentType是Django内置的组件,可以方便我们快速的连表查询。

  • 可以追踪项目中所有app和model的对应关系,并记录在ContentType表中
  • models.py文件的表结构写好后,通过makemigrations和migrate两条命令迁移数据后,在数据库中会自动生成一个django_content_type表:

  • 每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录
  • 加的几个字段都不会在数据库中生成,它只是用来查询、插入

二、使用ContentType

GenericRelation 只是为了方便查询,不会再表中产生该字段

GenericForeignKey 只是为了方便保存

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation

class Couser(models.Model):
    title = models.CharField(max_length=32)
    # 不需要做数据库迁移,这个字段不会在数据表中生成,只用来方便查询
    policy = GenericRelation(‘PricePolicy‘, object_id_field=‘course_id‘, content_type_field=‘table_id‘)

class PricePolicy(models.Model):
    price = models.DecimalField(max_digits=8, decimal_places=2)
    period = models.CharField(max_length=32)
    # 强调:如果是外部导入的表,不能带引号

    # 表的id
    table_id = models.ForeignKey(to=ContentType)
    # table_bb = models.ForeignKey(to=‘contenttypes.ContentType‘)

    # 课程id
    course_id = models.IntegerField()
    # PositiveIntegerField()---正整数

    # 如果表id 字段名叫:content_type ,课程id字段名叫:object_id ,GenericForeignKey就不需要传参数
    # 不需要做数据库迁移,也不会再数据库生成字段,只用来做查询和插入
    # 如果保存的时候,只需要传content_obj这个字段,内部自动会保存table_id,course_id
    content_obj = GenericForeignKey(‘table_id‘,‘course_id‘)
    

三、使用场景总结

1、价格策略系统

对于同一种商品可能有很多种价格,例如一个某课程的不同周期的价格是不一样的

2、优惠券系统

对于商品,有很多种优惠券,例如满200减30,满400减80……

原文地址:https://www.cnblogs.com/linagcheng/p/10170346.html

时间: 2024-08-30 12:59:52

Django框架(二十七)—— ContentType组件的相关文章

django框架<二>

django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). 每个模型是一个Python类,子类django.db.models.model 模型中的每个属性代表一个数据库字段. # DEMO class Student(models.Model): name = models.CharField(m

Django框架基础之Form组件

服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息 form组件的2大功能:       1 验证(显示错误信息)       2 保留用户上次输入的信息                  -- 可以生成html标签应用: class A_Form(Form): 字段=fields.字段类型(默认参数: required=True, widget=widgets.插件(attrs={})) 常用字段:Charfield,RegexField,I

Django框架(二)

一:Django项目创建步骤: 方式1:命令创建: 进入指定目录 C:\Users\bing>F: F:\>cd mysite F:\mysite>django-admin startproject mysite F:\mysite>python manage.py startapp app01 F:\mysite>python manage.py startapp app02 F:\mysite>python manage.py startapp app03(一个Dj

Django框架(二):设计模型

1. 设计模型 我们之前操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 当然可以,这就要使用ORM框架了. 1.1 ORM框架 O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据.ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表

Android笔记二十七.Service组件入门(一).什么是Service?

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简介 Service为Android四大组件之一,Service与Activity组件相似,都代表可执行的程序且有自己的生命周期,唯一的区别是Activity组件提供界面方便人机交互而Service只在后台运行且没有交互界面.Service是android 系统中的一种组件,它们都是从Context派生出来的,但是它不能自己运行,只能在后台运行,并且可以和其

Django框架进阶7 forms组件(pycharm内置测试环境Python Console), cookie与session操作

forms组件 写一个注册页面 获取用户输入的用户名和密码 用户点击注册发送到后端做用户名密码的校验 用户名中不能包含金瓶mei 不符合社会主义核心价值观 密码不能为空 你个DSB,密码怎么能为空 1.手写获取用户输入的前端页面代码 渲染页面 2.后端获取用户数据并做合法性校验 校验数据 3.将校验之后的结果渲染到前端页面 展示信息 不用forms组件代码: app01/views.py from django.shortcuts import render,HttpResponse # Cre

Django框架模版继承与组件使用

模版继承(母版继承) 模版继承可以创建一个基本的"骨架"模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks . <!--设置一个共同的HTML模版(一个HTML文件,base.html)--> <!--其他的html文档来继承这个公共的母版--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

Django框架 之 modelform组件

浏览目录 创建mldelform 添加记录 编辑记录 Django框架中的modelform组件 通过名字我们可以看出来,这个组件的功能就是把model和form组合起来. 下面我们来看一个例子: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢?首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存其实,重点不是这些,而是合法性

Django框架目录索引

Django框架目录索引 自定义Web框架与jinja2模板 HTTP协议详细介绍 cookie和session Django框架 (一) 环境配置及简单使用 Django框架(二) MTV模型简介 Django框架(三) url反向解析与csrf-token设置 Django框架(四) Django之模板语法 Django框架(五) Django之模板继承 Django框架 (六) Django模型 Django框架(七) Django之ORM数据库操作 Django框架(八) Django之