ContentTyep组件:
帮助我们关联所有数据库的表
帮助我们反向查询关联数据表中的所有策略信息
GenericForeignkey(帮助我们快速插入数据)
GenericRelation(用于反向查找)
有上面两个外键的字段仅用于快速查找,不再数据库生成表结构

一  需求

1.1需求信息

项目,有课程,学位课(不同的课程字段不一样),价格策略

问题,1 如何设计表结构,来表示这种规则
        2 为专题课,添加三个价格策略
          3 查询所有价格策略,并且显示对应的课程名称
          4 通过课程id,获取课程信息和价格策略

二  使用ContentType实现需求

2.1通过django提供的ContentType表构建

2.2models层创建

  1. from django.db import models
  2.  
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
  5.  
  6. class Course(models.Model):
  7. title = models.CharField(max_length=32)
  8. # 不会在数据库中生成字段,只用于数据库操作
  9. # policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='contentType')
  10.  
  11. class DegreeCourse(models.Model):
  12. title = models.CharField(max_length=32)
  13.  
  14. class PricePolicy(models.Model):
  15. # 跟ContentType表做外键关联
  16. contentType = models.ForeignKey(to=ContentType)
  17. # 正数
  18. object_id = models.PositiveIntegerField()
  19.  
  20. # 引入一个字段,不会在数据库中创建,只用来做数据库操作
  21. content_obj = GenericForeignKey('contentType', 'object_id')
  22.  
  23. period = models.CharField(max_length=32)
  24. price = models.FloatField()

2.3views层

  1. from app01 import models
  2. def test(request):
  3. import json
  4. # 方式一插入价格规则
  5. # ret=models.ContentType.objects.filter(model='course').first()
  6. # course=models.Course.objects.filter(pk=1).first()
  7. # print(ret.id)
  8. # models.PricePolicy.objects.create(period='30',price=100,object_id=course.id,contentType_id=ret.id)
  9.  
  10. # 方式二插入价格规则
  11. # course=models.Course.objects.filter(pk=1).first()
  12. # # content_obj=course 会自动的把课程id放到object_id上,并且去ContentType表中查询课程表的id,放到contentType上
  13. # models.PricePolicy.objects.create(period='60',price=800,content_obj=course)
  14. # 增加学位课,价格规则
  15. degreecourse = models.DegreeCourse.objects.filter(pk=1).first()
  16. models.PricePolicy.objects.create(period='60', price=800, content_obj=degreecourse)
  17.  
  18. # 查询所有价格策略,并且显示对应的课程名称
  19. # ret=models.PricePolicy.objects.all()
  20. # for i in ret:
  21. # print(i.price)
  22. # print(i.period)
  23. # # content_obj 就是代指关联的课程,或者学位课程的那个对象
  24. # print(type(i.content_obj))
  25. # print(i.content_obj.title)
  26.  
  27. # 通过课程id,获取课程信息和价格策略
  28. # course=models.Course.objects.filter(pk=1).first()
  29. # print(course.policy.all())
  30. return HttpResponse('创建成功')

django组件之ContentType的更多相关文章

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

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

  2. 19,django组件之contenttype(一)

    django组件之contenttype(一) 方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变 ...

  3. 05 django组件:contenttype

    1.django组件:contenttype 组件的作用:可以通过两个字段让表和N张表创建FK关系 1.专题课,学位课 如何关联 过期时间?? 方法1:分别创建 专题课--过期时间表 .学位课--过期 ...

  4. django组件之contenttype(一)

    方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变.  这样不合理的,我们的表结构一般设计完就不会 ...

  5. Django组件之contenttype的应用

    contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建了新的model并执行数据库迁移后,Conte ...

  6. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  7. Django - 文件上传、Django组件 - 分页器(paginator)

    一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...

  8. Django组件-cookie,session

    昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...

  9. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

随机推荐

  1. Android——Activity生命周期(转)

    Activity生命周期   子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细 ...

  2. PHP——内测:新闻管理练习题及答案(自己做的)

    试题看文件:1.28练习内测:新闻管理.pdf 数据库为newssystem 表为news 表内容为 fabuxinwen.php <!DOCTYPE html PUBLIC "-// ...

  3. 使用js事件机制进行通用操作&特定业务处理的协调

    背景:提供一个通用的功能工具条,工具条会在特定的事件响应时进行一些通用处理:第三方系统使用iframe嵌入这个工具条中,在工具条的特定的事件响应时进行通用处理的时候,有可能第三方系统会有一些自己的业务 ...

  4. 使用jsonp处理跨域问题

    调用web接口,get请求,发现提示:No 'Access-Control-Allow-Origin' header is present on the requested resource. 这个和 ...

  5. Task Scheduling

    Introduction In the past, developers have generated a Cron entry for each task they need to schedule ...

  6. 获取checkbox 组成字符串

    <input type="checkbox" id="goods_server_name" name="goods_server_name[]& ...

  7. C语言错误 指针的类型错误

    //指针的类型错误 #include<stdio.h> #include<stdlib.h> #include<string.h> //用const来限制形参的指向 ...

  8. Latex之希腊字母表 花体字母 实数集

    花体字母 \mathcal{x} 实数集字母 \mathbb{R} 转自:http://blog.csdn.net/lanchunhui/article/details/49819445 拉丁字母是2 ...

  9. 用公式编辑器编辑n元乘积的方法

    在数学中经常会出现很多个元素进行求和或者是乘积的情况,但是在整个数学过程中,不可能将所有的元素都写出来,这样很费时费力同时过程也很赘余,不能很好地理解其中的过程,因此数学中对于这一类的多元相加或者相乘 ...

  10. hdu 4715(打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4715 思路:先打个素数表,然后判断一下就可以了. #include<iostream> # ...