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 # ...
随机推荐
- Mybatis 的 xml 文件语法错误,启动项目时控制台一直循环解析但是不打印错误
重写SqlSessionFactoryBean的buildSqlSessionFactory方法: eg: package com.slp; import java.io.IOException; i ...
- Orleans学习总结(四)--集群配置篇
上篇我们讲了Orleans学习总结(三)--持久化篇,这一篇我们来说说集群配置,毕竟这个才是Orleans的看家本领 Orleans支持热起动,支持自动节点发现,能够断线重发等一系列黑科技. 我这篇是 ...
- JSP页面嵌套乱码解决
项目中审批过程需要将业务表单嵌套在审批的页面中.由于业务表单很多,前台已经axjx到了本次选择的表单的地址.本来做的就是把这个链接放在审批页面上,但现在需求的就是直接把这个biz表单嵌套在审批的页面中 ...
- Web 通信 之 长连接、长轮询(long polling)(转载)
基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...
- Spring学习笔记--代理
静态代理 1.静态代理的角色分析(UML画图推荐使用StarUML软件) 抽象角色---一般使用接口或者抽象类来实现. 真实角色---被代理的角色. 代理角色---代理真实角色—代理真是角色后一般会做 ...
- day_6.14py网络编程
被动套接字和新建出套接字的区别 单任务,单线程,非阻塞!!!!服务器! #2018-6-14 16:51:25 #!--*--coding:utf-8 --*-- ''' 单进程,单任务 少的可以,多 ...
- Saltstack之通过grains在配置文件中赋值
案例,使用salt给客户端安装zabbix agent时需要在配置文件中自动生成主机名信息 zabbix agent安装sls zabbix-agent-install: file.managed: ...
- 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事
导读:GIAC大会期间,蚂蚁金服杨冰,黄挺等讲师面向华南技术社区做了<数字金融时代的云原生架构转型路径>和<从传统服务化走向Service Mesh>等演讲,就此机会,高可用架 ...
- 关于JAVA项目中的常用的异常处理情况
Java异常处理的几个原则如下. 1)不要丢弃异常,捕获异常后需要进行相关处理.如果用户觉得不能很好地处理该异常,就让它继续传播,传到别的地方去处理,或者把一个低级的异常转换成应 ...
- Zabbix unreachable poller processes more than 75% busy
“Zabbix poller processes more than 75% busy”警报问题解决 虽然Zabbix的监控警报各种有,碰到最多的几个莫过于内存耗尽,网络不通,IO太慢还有这个“Zab ...