content_type
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的更多相关文章
- Django content_type 简介及其应用
在网上看到 django ORM 有一个 content_type 字段表的应用,这张表不是我们通过建立model类添加的,而是django自动帮我们生成的,具体的作用先简单的举个例子给大家介绍一下. ...
- $Django content_type组件 缓存组件
1 content_type组件(只能方便插入添加) 需求:课程,学位课(不同的课程字段不一样),价格策略 #免费课 class Free_classes (models.Model): id = ...
- AI-跨域、垃圾回收、content_type组见、接口处理
AI-跨域.垃圾回收.content_type组见.接口处理 跨域 为什么有跨域?什么时候遇见的?答:由于浏览器的同源策略 阻止ajax请求 不阻止src请求:在测试时,项目上线后不会遇见跨域.源:协 ...
- 11.8Django中的组件content_type
2018-11-8 18:59:11 在Django中已经有一个contenttype这个组件,并且在python manage.py makemigrations 和migrate的时候,一起在数据 ...
- django之content_type
什么是content type:django内置的一个组件,这个组件帮忙做连表的操作.(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库说有的表:让我们可 ...
- Django 组件content_type
content type: django内置组件,这个组件帮忙做连表操作(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库所有的表:可以快速插入数据,并且 ...
- django model content_type 使用
一.关于content_type 使用 1.引入模块在models from django.db import models from django.contrib.contenttypes.mode ...
- 11.关于django的content_type表
****** Django的contenttype表中存放发的是app名称和模型的对应关系 contentType使用方式 - 导入模块 from django.contrib.contenttype ...
- Django中的content_type表
models.py from django.db import models from django.contrib.contenttypes.models import ContentType # ...
随机推荐
- gitlab图形化使用教程 (mtm推荐)
原文:http://www.restran.net/2016/02/23/git-and-gitlab-guide/?utm_source=tuicool&utm_medium=referra ...
- postmain 通过函数动态设置参数
调用服务器的服务,其中有个参数是签名,签名需要计算,需要写一个本地函数. 下一步 pre-request Script 的代码如下: (function($) { if(!$.encoding) $. ...
- WCF数据传输安全--数字证书
WCF 的传输安全涉及认证(客户端与服务器端双向认证).消息一致性(签名)和机密性(加密)三个主题. 常用认证方式: 第一:用户名/密码认证:wcf提供三种认证模式:1.将用户名映射到windows账 ...
- QT 获取电脑时间
使用环境: VS2010 & QT Designer5 #include <QDateTime> //包含头文件 QDateTime local(QDateTime::curre ...
- Django框架详解
一.WSGI接口 WSGI服务网关接口:Web Server Gateway Interface缩写. WSGI是python定义的Web服务器和Web应用程序之间或框架之间的通用接口标准. WSGI ...
- B - 考试排名
C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法,总是给你记上一笔,表明 ...
- scala breeze使用替换底层线性库
scala -J-Dcom.github.fommil.netlib.NativeSystemBLAS.natives=mkl_rt.dll -cp "D:\betn\Scala\Scala ...
- 微软VBS生成Excel内容和图表示例
<HTML> <BODY> <INPUT id=button1 name=button1 type=button value=Button> <SCRIPT ...
- AIX装机问题123
好久没有实施,好记性不如好笔记,那就记录下吧 1文件系统创建挂载 通过smit工具很容易简单举例创建一个jfs2类型文件系统并挂载 创建lv smit mklv 创建jfs2类型文件系统 指定lv s ...
- acm入门练习心得
A题 两数相加等于n相乘等于m 问是否存在两数 写了超级久没有写出来,因为我的思路是 把m的因子都找出来,加加看,看等不等于n.后来发现m的因子还要考虑负数的情况,还要考虑m是不是负数的情况.太过麻 ...