使用背景

  最近设计表的时候遇到一个问题,有两门课程  一门专业课,一门学位课,我们按照时间长度来进行售卖,比如专业课一个月19元,两个月35元,三个月50元。

可以这么做但是领导不让我这么设计。。。。。。

所以就想着用第三章表来实现需求

然后就想着这么设计但是这么设计我在查表的时候实在是太麻烦了,后来发现了ContentType这个神器啊:

这是Django中自带的ContentType这张表中就有我创建的那三张表(学位课表,专业课表,价格策略表),所以表结构如下

表的创建

from django.db import models

# Create your models here.

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=32) class Course(models.Model):
name = models.CharField(max_length=32) # 数据库不生成,只用于链表查询
policy_list = GenericRelation("PricePolicy") class PricePolicy(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField() # 不在数据库中生成,只用于帮助你做数据操作
content_object = GenericForeignKey('content_type', 'object_id') period = models.CharField(max_length=32)
price = models.FloatField()

model.py

def index(request):
course_obj = Course.objects.get(id=2)
# content_obj 是GenericForeignKey 便于操作直接赋予对象即可
PricePolicy.objects.create(period='', price=9.9, content_object=course_obj)
PricePolicy.objects.create(period='', price=19.9, content_object=course_obj)
PricePolicy.objects.create(period='', price=29.9, content_object=course_obj)
price_list = PricePolicy.objects.all() for priceplicy in price_list:
# 取出一个个的models对象 . content_obj 就可以去到相对应的
print(priceplicy.content_obj.name,priceplicy.price, priceplicy.period) course_obj = Course.objects.get(id=1)
obj = course_obj.policy_list.filter(id=3)
objs = course_obj.policy_list.all() print(obj)
return HttpResponse('ok')

views.py

GenericForeignKey, GenericRelation 
都不会在数据库中生成字段,只是方便查询

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

  1. Django中的许可(Permissions)和用户组(Group)

    Reference: http://www.cnblogs.com/esperyong/archive/2012/12/20/2826690.html 接着上面的3篇讨论文章,我们阐述了Django中 ...

  2. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  3. Django 组件之 ----- content-type

    Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...

  4. django 中下载文件与下载保存为excel

    一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍dja ...

  5. Django中的视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  6. django中使用POST方法 获取POST数据

    在django中获取post数据,首先要规定post发送的数据类型是什么. 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送PO ...

  7. django中的ajax组件

    目录 django中的ajax 向服务器发送请求的途径 Ajax的特点 基于jquery实现的ajax请求 利用ajax实现计算器 利用ajax实现登陆认证 利用form表单进行文件上传 利用ajax ...

  8. django中的权限控制(form增删改)

    Django默认提供了权限控制,但只能对使用了其自带的登录认证的用户进行权限控制,说白了就是只能对存储在auth_user表中的用户进行权限控制,但不能对未登录过的用户进行权限控制.但如果通过集成LD ...

  9. Django中HttpRequest和HttpResponse

    请求和响应对象 Django中通过使用请求和响应对象来传递系统的状态. 当请求一个页面的时候,Django就创建一个HttpRequest对象,它包含了关于请求的元数据对象,然后Django加载适当的 ...

随机推荐

  1. 转:Windows版本判断大全

    /***************************************************************************** Operating System Vers ...

  2. java面试题----工厂模式大整理(面试问的较多)

    在一次面试中了解到工厂模式在实际应用中的重要性,可以说工厂模式的应用随处可见,以下是百度百科对工厂模式的介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jiv ...

  3. xshell里的一些配色方案

    只需要把下面的代码复制到记事本中,保存为xcs文件格式,然后在xshell中导入选中就可以换配色方案了,可以自己修改下面的代码 [ubuntu]text(bold)=ffffffmagenta(bol ...

  4. ORACLE_DELETE

    SQL DELETE Statement The SQL DELETE Statement The DELETE statement is used to delete existing record ...

  5. O/S-Error: (OS 23) Data error (cyclic redundancy check)问题处理

    RMAN-03002: backup plus archivelog 命令 (在 08/24/2015 03:31:00 上) 失败ORA-19501: 文件 "XXXXXX.DBF&quo ...

  6. Android(java)学习笔记30:泛型接口的概述和使用

    1. 泛型接口的概述和使用: package cn.itcast_06; /* * 泛型接口:把泛型定义在接口上 */ public interface Inter<T> { public ...

  7. 20165322 实验一 Java开发环境的熟悉

    实验一 Java开发环境的熟悉 一.实验内容及步骤 (一)命令行下Java程序开发 按照步骤新建目录.键入代码,再编译运行输出.运行结果和TREE结构图如下: (二) IDEA下Java程序开发.调试 ...

  8. Codeforces 225E 梅森素数

    注:梅森素数,数组表示的是2^n-1的n,指数. #include <stdio.h> #include <math.h> ; ; typedef long long ll; ...

  9. 创建git项目的feature分支以及下载特定分支的仓库代码

    在掌握了基础git的使用后可以按照这个步骤来: 下载项目:git clone <仓库地址>如果要下载非master的某分支代码:git clone -b <分支名> <仓 ...

  10. android(eclipse)界面控件以及活动总结(二)

    用户界面以及活动总结: (复习时忘了的特别标记了下划线,补充的用了红色) 1用户界面: ~android:id=""专门用于找到指定界面的索引 如果要在后面的程序中调用该控件,则一 ...