django之contenttype

一 楔子 路飞学城

  路飞学城有两种收费策略。一是按照学位来收费,python,C++,Java,另外一种是按照部分课程收费,python基础,面向对象,函数,这样一部分来收费。涉及到时间,一个月时长的多少钱,两个月时长的多少钱。

  所以,第一版的表格设计如下。

  四张表,价格策略外键关联课程表。

  

  

  进阶1:两张价格策略表的重复的太多,没有必要

  

  可以在价格策略表后面新添加一列,空表示不相关。

  表面上这个没问题解决了。隐患是 课程除了学位课,普通课外,以后可能还有新的种类的课程,如果依照这种思路,每当出现一个新的课程,数据库的表结构就要发生改变,这是不允许的。

更好的方法是什么呢?

  进阶2  字段修改为表名,ID这样都多少表都没有关系了。有新的课程出现,也可以解决掉。数据库的结构也不需要改。 是不是很机智,很巧妙。

  适用范围:一张表同时和多张表进行关联。

  这就是contentype帮我们实现的效果。

  

  进阶3: 有没有优化的余地呢

    对面价格策略表,数据量非常大的时候,如果突然间想改一下课程表的名字,如果普通课程表,变为 普通的的课程表。这种情况下,表的改动量是非常巨大的。所以,新添加一个表,存储所有的表名称。价格策略中的表名,关联这个新建的表的id。这样如果,出现想修改某张表的表名的时候,直接对新建的这张表进行修改,就可以。

  实际上,这就是contenttype的内部工作原理。

    适用范围:一张表同时和多张表进行关联。

  这就是contentype帮我们实现的效果。

  

二 代码

  手动实现上述关联。

from django.db import models

# Create your models here.
class Course(models.Model):
    ‘‘‘
    普通课程
    ‘‘‘
    title = models.CharField(max_length=32)

class DegreeCourse(models.Model):
    ‘‘‘
    学位课程
    ‘‘‘
    title = models.CharField(max_length=32)

class PricePolicy(models.Model)
    ‘‘‘
    价格策略
    ‘‘‘
    price = models.IntegerField()
    period= models.IntegerField()
    course_name = models.CharField(max_length=32,verbose_name=‘关联的课程表的名称‘)  #这两行代码就是手动实现的关键
    course_id = models.CharField(max_length=32,verbose_name=‘关联的课程表中的行的id‘) #

  利用contenttype实现。

  

原文地址:https://www.cnblogs.com/654321cc/p/8545445.html

时间: 2024-10-11 01:03:43

django之contenttype的相关文章

Django之ContentType组件

一.需求 给商品创建优惠券: 看看下面表结构: class Food(models.Model): """ id name 1 面条 """ name = models.CharField(max_length=32) def __str__(self): return self.name class Fruit(models.Model): """ id name 1 苹果 """ n

Django 使用Contenttype组件创建多关联数据库表

from django.db import models '''contenttype使用意义:如果使用contenttypes就不需要再使用多个Foreignkey, 因为在django_content_type表已经存储了app名和model名, 所以我们只需要将我们创建的模型与django_content_type表关联起来, 然后再存储一个实例 id 即可准确定位到某个app中某个模型的具体实例 ''' '''使用Django的Contenttype字段.''' # 导入必需模块 fro

Django中contenttype的应用

content_type表将app名称与其中的表的关系进行保存 通过下边的示例来理解content_type的具体应用: models: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation # Create you

Django的ContentType框架django_conent_type

Django包含了一个conenttype应用程序,记录了Django项目中安装的所有模型,为当前项目所有基于Django驱动的model提供了更高层次的抽象接口. 一.概述 ContentTypes应用程序的核心是 django.contrib.contenttypes.models.ContentType: @python_2_unicode_compatible class ContentType(models.Model): app_label = models.CharField(ma

Django的ContentType应用

ContentType实例提供的接口 1.ContentType.model_class() : 获取当前ContentType类型所代表的模型类 2.ContentType.get_object_for_this_type() : 使用当前ContentType类型所代表的模型类做一次get查询 ContentType管理器(manager)提供的接口 1.ContentType.objects.get_for_id() : 通过id寻找ContentType类型,这个跟传统的get方法的区别

【Django】ContentType组件

目录 理解 表结构 使用 @ 好,现在我们有这样一个需求,我们的商城里有很多的商品,然而节日要来了,我们要搞活动. 那么,我们就要设计优惠券,优惠券都有什么类型呢?满减的.折扣的.立减的.等等等... 我们对应着活动类型,对某类商品设计优惠卷,比如: 家电是一类商品.食物是一类商品,那么我们就可以设计家电折扣优惠券,以及食物满减优惠券等. 所以,我们一顺手,表结构就出来了: from django.db import models is_true = {'null': True, 'blank'

【Django】ContentType组件 -- 2019-08-08 18:03:22

目录 理解 表结构 使用 原文: http://106.13.73.98/__/72/ @ 好,现在我们有这样一个需求,我们的商城里有很多的商品,然而节日要来了,我们要搞活动. 那么,我们就要设计优惠券,优惠券都有什么类型呢?满减的.折扣的.立减的.等等等... 我们对应着活动类型,对某类商品设计优惠卷,比如: 家电是一类商品.食物是一类商品,那么我们就可以设计家电折扣优惠券,以及食物满减优惠券等. 所以,我们一顺手,表结构就出来了: from django.db import models i

Django 之 ContentType组件

一.什么是 ContentTypes ContentTypes 是 Django 内置的一个应用,它可以追踪记录项目中所有 app 和 model 的对应关系,并记录在 django_content_type 表中. 二.ContentTypes 的应用场景 ContentTypes 适用于一张表与多张表相关关联的场景,如:一个卖课程的网站,它主要售卖两类课程(普通课程和学位课程).不同课程之间因学习周期不同,价格也不尽相同.因此就形成了每个课程可能有一个或多个价格策略.类似于下面这种: 如果我

django ContentType组件

一,需求 给商品创建优惠券: 看看下面表结构: class Food(models.Model): """ id name 1 面条 """ name = models.CharField(max_length=32) def __str__(self): return self.name class Fruit(models.Model): """ id name 1 苹果 """ n