1.作用

将app名称与其中表关系进行保存

在models创建表时,关联到ContentType并不会产生实际的字段

2.使用

在models中代码

from django.db import models

from django.contrib.contenttypes.fields import GenericRelation
# Create your models here.
class Courser(models.Model):
    title = models.CharField(max_length=32)
    #这里的object_id_field有默认值object_id,content_type_field有默认值content_type
    #如果PricePolicy的字段名不是和默认值一样,那就要和下面一样,和PricePolicy表里的字段名对上
    #不需要做数据库迁移,不会生成字段,只是方便用来查询
    policy = GenericRelation('PricePolicy', object_id_field='course_id', content_type_field='table_id')

    def __str__(self):
        return self.title

class DegreeCourser(models.Model):
    title = models.CharField(max_length=32)
    policy = GenericRelation('PricePolicy', object_id_field='course_id', content_type_field='table_id')

    def __str__(self):
        return self.title

from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType

class PricePolicy(models.Model):
    price = models.DecimalField(max_digits=8, decimal_places=2)
    period = models.CharField(max_length=32)
    # 强调,如果是外部导入的表,不能带引号
    # 表的id
    table_id = models.ForeignKey(to=ContentType)
    # 课程id
    course_id = models.IntegerField()
    # PositiveIntegerField()---正整数
    # 如果表id字段名叫:content_type,课程id字段名叫:object_id,GenericForeignKey()就不需要传参
    # 不需要做数据库迁移,也不会在数据库生成字段,只用来查询和插入
    # 如果保存的时候,只需要传content_obj这个字段,内部自动会保存table_id,course_id

    content_obj = GenericForeignKey('table_id', 'course_id')

在views中代码

from django.shortcuts import render,HttpResponse,reverse,redirect

from django.contrib.contenttypes.models import ContentType

# Create your views here.
from app01 import models
def test(request):
    #为django专题课添加三个价格策略
    # course=models.Courser.objects.get(pk=1)
    #
    # table_id=ContentType.objects.get(model='courser')
    # ret=models.PricePolicy.objects.create(price=9.9,period='1个月',table_id=table_id,course_id=course.pk)
    # ret=models.PricePolicy.objects.create(price=9.9,period='2个月',table_id=table_id,course_id=course.pk)
    # ret=models.PricePolicy.objects.create(price=9.9,period='3个月',table_id=table_id,course_id=course.pk)

    #使用contenttype插入,其实就是根据course,查出course.pk,course所在表的表名,本质上还是做了上面的操作
    # course = models.Courser.objects.get(pk=2)
    # ret=models.PricePolicy.objects.create(price=9.9,period='1个月',content_obj=course)
    # ret=models.PricePolicy.objects.create(price=19.9,period='2个月',content_obj=course)
    # ret=models.PricePolicy.objects.create(price=29.9,period='3个月',content_obj=course)
    #
    #给学位课加一个价格策略
    # degre_course=models.DegreeCourser.objects.get(pk=1)
    # models.PricePolicy.objects.create(price=19999.9,period='5个月',content_obj=degre_course)

    #查询所有价格策略,并且显示对应的课程名称
    # ret=models.PricePolicy.objects.all()
    # for i in ret:
    #     print(type(i.content_obj))
    #     print(i.content_obj)

    #查询Django所有的价格策略
    course=models.Courser.objects.get(pk=1)
    course_policy=course.policy.all()
    for i in course_policy:
        print(i.period)
    return HttpResponse('ok')

content_type的更多相关文章

  1. Django content_type 简介及其应用

    在网上看到 django ORM 有一个 content_type 字段表的应用,这张表不是我们通过建立model类添加的,而是django自动帮我们生成的,具体的作用先简单的举个例子给大家介绍一下. ...

  2. $Django content_type组件 缓存组件

    1  content_type组件(只能方便插入添加) 需求:课程,学位课(不同的课程字段不一样),价格策略 #免费课 class Free_classes (models.Model): id = ...

  3. AI-跨域、垃圾回收、content_type组见、接口处理

    AI-跨域.垃圾回收.content_type组见.接口处理 跨域 为什么有跨域?什么时候遇见的?答:由于浏览器的同源策略 阻止ajax请求 不阻止src请求:在测试时,项目上线后不会遇见跨域.源:协 ...

  4. 11.8Django中的组件content_type

    2018-11-8 18:59:11 在Django中已经有一个contenttype这个组件,并且在python manage.py makemigrations 和migrate的时候,一起在数据 ...

  5. django之content_type

    什么是content type:django内置的一个组件,这个组件帮忙做连表的操作.(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库说有的表:让我们可 ...

  6. Django 组件content_type

    content type: django内置组件,这个组件帮忙做连表操作(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库所有的表:可以快速插入数据,并且 ...

  7. django model content_type 使用

    一.关于content_type 使用 1.引入模块在models from django.db import models from django.contrib.contenttypes.mode ...

  8. 11.关于django的content_type表

    ****** Django的contenttype表中存放发的是app名称和模型的对应关系 contentType使用方式 - 导入模块 from django.contrib.contenttype ...

  9. Django中的content_type表

    models.py from django.db import models from django.contrib.contenttypes.models import ContentType # ...

随机推荐

  1. [转]linux 调用动态库so文件

    记录一个面试被问到的问题. extern 有什么用途? 除了多文件共享全局变量外还有呢? extern "C" 的功能? 我想看完这篇文章就可以知道第三个问题了. 关于动态调用动态 ...

  2. 腾讯云极速配置NodeJS+LNMP运行环境

    版权声明:本文由吴逸翔原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/848754001487150669 来源:腾云阁 h ...

  3. [原]Jenkins(十一)---jenkins使用管理员admin创建用户和分配权限

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  4. 【CF587F】Duff is Mad AC自动机+分块

    [CF587F]Duff is Mad 题意:给出n个串$s_1,s_2..s_n$,有q组询问,每次给出l,r,k,问你编号在[l,r]中的所有串在$s_k$中出现了多少次. $\sum|s_i|, ...

  5. nginx负载均衡(反向代理)

    6,安装nginx 6.1 依赖库安装  要安装在root根目录里,不要装在虚拟环境里面 yum install gcc-c++ pcre pcre-devel zlib zlib-devel ope ...

  6. Linux环境变量与文件查找

    作业: 找出/etc目录下所有以.list结尾的文件 代码:locate /etc/\*.list sudo find /etc/ -name \*.list

  7. API(二)之Requests and Responses

    这一部分可以让返回的api信息以两种格式呈现:.json和.api REST框架的核心部分.我们来介绍几个基本的组成部分. Request objects REST框架引入了Request对象来扩展常 ...

  8. Kindle2018 一周使用报告

    使用2018年年末刚刚发布的KPW有一周时间了,可以借这个机会来对这部设备做一个使用报告了. 那咱们就参考如下描述吧: 1.轻薄便携:6英寸的屏幕,11.6厘米*16.7厘米的机身尺寸,加上仅有8.2 ...

  9. {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index

    03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...

  10. 【每日一题】 uva-232 模拟+输出要求很严格

    https://cn.vjudge.net/problem/UVA-232 uva的题,结尾不能多\n,空格什么的 反正就是个中型模拟,题目多读就行 #define _CRT_SECURE_NO_WA ...