一、项目背景

二、版本一

三、版本二

三、终极版(使用ContentType)

一、项目背景

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

  问题:1.如何设计表结构,来表示这种规则

     2.为专题课,添加三个价格策略

     3.查询所有的价格策略,并且显示对应的课程名称

        4.通过课程id,获取课程信息和价格策略

二、版本一

  一个课程表,包含学位课和专题课,一个价格策略表,一对多关联

三、版本二

学位课表,专题课表,周末表,价格策略表(在价格策略表中加入多个FK跟课程表做关联):后期再加其他课程,可维护性差

三、终极版(使用ContentType)

通过Django提供的ContentType表,来构建

models层:

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()

views层:

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())

最新文章

  1. Homebrew安装及使用
  2. JDK NIO编程
  3. 读javascript高级程序设计07-引用类型、Object、Array
  4. AngularJS directive入门例子
  5. docker nodejs 基本应用
  6. ZOJ3784 String of Infinity(AC自动机&&强连通分量)
  7. 关于IOS9更新的适应与适配
  8. 【HDOJ】2157 How many ways??
  9. AndroidSdk下载地址和环境变量配置
  10. Codeforces Round #256 (Div. 2) D. Multiplication Table(二进制搜索)
  11. cpp(第九章)
  12. 启动关闭zookeeper集群的脚本
  13. 在C#中interface与abstract class的区别
  14. bzoj 1486: [HNOI2009]最小圈
  15. HttpListener 实现web服务器
  16. 生成器函数_yield_yield from_send
  17. James 3.1服务器的安装与搭建
  18. JSONObject基本内容(二)
  19. js正则表达式验证身份证号和密码
  20. 【转】Web前端性能优化——如何提高页面加载速度

热门文章

  1. Tools - 在线编译环境和工具汇总
  2. cudaGetDevice() failed. Status: cudaGetErrorString symbol not found.怎么解决
  3. Python机器学习基础教程-第1章-鸢尾花的例子KNN
  4. WXS-运算符
  5. 构建C 程序
  6. java生成验证码结合springMVC
  7. python学习-41 装饰器 -- 高阶函数
  8. Python中的动态属性与描述符
  9. 从NV12中裁剪子画面注意事项
  10. mac oxs 上查看进程监听的端口号 lsof