django组件之ContentType
ContentTyep组件:
帮助我们关联所有数据库的表
帮助我们反向查询关联数据表中的所有策略信息
GenericForeignkey(帮助我们快速插入数据)
GenericRelation(用于反向查找)
有上面两个外键的字段仅用于快速查找,不再数据库生成表结构
一 需求
1.1需求信息
项目,有课程,学位课(不同的课程字段不一样),价格策略
问题,1 如何设计表结构,来表示这种规则
2 为专题课,添加三个价格策略
3 查询所有价格策略,并且显示对应的课程名称
4 通过课程id,获取课程信息和价格策略
二 使用ContentType实现需求
2.1通过django提供的ContentType表构建
2.2models层创建
- from django.db import models
- from django.contrib.contenttypes.models import ContentType
- from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
- class Course(models.Model):
- title = models.CharField(max_length=32)
- # 不会在数据库中生成字段,只用于数据库操作
- # policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='contentType')
- class DegreeCourse(models.Model):
- title = models.CharField(max_length=32)
- class PricePolicy(models.Model):
- # 跟ContentType表做外键关联
- contentType = models.ForeignKey(to=ContentType)
- # 正数
- object_id = models.PositiveIntegerField()
- # 引入一个字段,不会在数据库中创建,只用来做数据库操作
- content_obj = GenericForeignKey('contentType', 'object_id')
- period = models.CharField(max_length=32)
- price = models.FloatField()
2.3views层
- from app01 import models
- def test(request):
- import json
- # 方式一插入价格规则
- # ret=models.ContentType.objects.filter(model='course').first()
- # course=models.Course.objects.filter(pk=1).first()
- # print(ret.id)
- # models.PricePolicy.objects.create(period='30',price=100,object_id=course.id,contentType_id=ret.id)
- # 方式二插入价格规则
- # course=models.Course.objects.filter(pk=1).first()
- # # content_obj=course 会自动的把课程id放到object_id上,并且去ContentType表中查询课程表的id,放到contentType上
- # models.PricePolicy.objects.create(period='60',price=800,content_obj=course)
- # 增加学位课,价格规则
- degreecourse = models.DegreeCourse.objects.filter(pk=1).first()
- models.PricePolicy.objects.create(period='60', price=800, content_obj=degreecourse)
- # 查询所有价格策略,并且显示对应的课程名称
- # ret=models.PricePolicy.objects.all()
- # for i in ret:
- # print(i.price)
- # print(i.period)
- # # content_obj 就是代指关联的课程,或者学位课程的那个对象
- # print(type(i.content_obj))
- # print(i.content_obj.title)
- # 通过课程id,获取课程信息和价格策略
- # course=models.Course.objects.filter(pk=1).first()
- # print(course.policy.all())
- return HttpResponse('创建成功')
django组件之ContentType的更多相关文章
- Django 组件之 ----- content-type
Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...
- 19,django组件之contenttype(一)
django组件之contenttype(一) 方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变 ...
- 05 django组件:contenttype
1.django组件:contenttype 组件的作用:可以通过两个字段让表和N张表创建FK关系 1.专题课,学位课 如何关联 过期时间?? 方法1:分别创建 专题课--过期时间表 .学位课--过期 ...
- django组件之contenttype(一)
方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变. 这样不合理的,我们的表结构一般设计完就不会 ...
- Django组件之contenttype的应用
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建了新的model并执行数据库迁移后,Conte ...
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
- Django - 文件上传、Django组件 - 分页器(paginator)
一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...
- Django组件-cookie,session
昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
随机推荐
- Android——Activity生命周期(转)
Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细 ...
- PHP——内测:新闻管理练习题及答案(自己做的)
试题看文件:1.28练习内测:新闻管理.pdf 数据库为newssystem 表为news 表内容为 fabuxinwen.php <!DOCTYPE html PUBLIC "-// ...
- 使用js事件机制进行通用操作&特定业务处理的协调
背景:提供一个通用的功能工具条,工具条会在特定的事件响应时进行一些通用处理:第三方系统使用iframe嵌入这个工具条中,在工具条的特定的事件响应时进行通用处理的时候,有可能第三方系统会有一些自己的业务 ...
- 使用jsonp处理跨域问题
调用web接口,get请求,发现提示:No 'Access-Control-Allow-Origin' header is present on the requested resource. 这个和 ...
- Task Scheduling
Introduction In the past, developers have generated a Cron entry for each task they need to schedule ...
- 获取checkbox 组成字符串
<input type="checkbox" id="goods_server_name" name="goods_server_name[]& ...
- C语言错误 指针的类型错误
//指针的类型错误 #include<stdio.h> #include<stdlib.h> #include<string.h> //用const来限制形参的指向 ...
- Latex之希腊字母表 花体字母 实数集
花体字母 \mathcal{x} 实数集字母 \mathbb{R} 转自:http://blog.csdn.net/lanchunhui/article/details/49819445 拉丁字母是2 ...
- 用公式编辑器编辑n元乘积的方法
在数学中经常会出现很多个元素进行求和或者是乘积的情况,但是在整个数学过程中,不可能将所有的元素都写出来,这样很费时费力同时过程也很赘余,不能很好地理解其中的过程,因此数学中对于这一类的多元相加或者相乘 ...
- hdu 4715(打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4715 思路:先打个素数表,然后判断一下就可以了. #include<iostream> # ...