ContentType组件

[TOC]

一、什么是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……

最新文章

  1. mysql的隐式转化
  2. BestCoder25 1001.Harry and Magical Computer(hdu 5154) 解题报告
  3. maven的安装与配置
  4. java 解决JFrame不能设置背景色的问题 分类: Java Game 2014-08-15 09:48 119人阅读 评论(0) 收藏
  5. [学姿势]实验室搬砖+node学习
  6. poj 1811 Prim test
  7. haproxy实现mysql slave负载均衡
  8. mysql、sqlserver数据库常见数据类型对应java中的的类型探究
  9. maven项目转成web项目
  10. PHP的ntohl网络字节序函数及相关知识
  11. HQL查询步骤
  12. 关于课堂测试ATM系统的总结
  13. C# CRC - 16
  14. dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误
  15. Task的在主线程处理异常信息的Helper类
  16. Beta阶段敏捷冲刺五
  17. [hgoi#2019/3/3]赛后总结
  18. 01. pt-align
  19. metasploit-smb扫描获取系统信息
  20. django xadmin 安装和使用

热门文章

  1. linux中的常用信号
  2. 解惑结构体与结构体指针(struct与typedef struct在数据结构的第一道坎)
  3. shell中#*,##*,#*,##*,% *,%% *的含义及用法
  4. split slice splice的简单区别
  5. iOS 点击按钮截屏
  6. shell位置参数的遍历
  7. VBA-数据库操作
  8. vue使用textare如何正确统计输入字符个数
  9. 第12篇Kubernetes 监控
  10. Java缓冲流的优点和原理