Django框架(十二)—— 补充:inclusion_tag、defer、only、choice、事务、创建多对多的第三张表
补充:inclusion_tag、defer、only、choice、事务、创建多对多的第三张表
一、inclusion_tag
1、作用
用于生成HTML片段,是数据由参数传入而变成动态
2、使用
# 1.app下新建一个模块,templatetags
# 2.创建一个py文件(mytag.py)
# 3.导入Library模块,实例化
from django.template import Library
register=Library() # -----> register名字一定不能变
# 4.写装饰器(标签,过滤器,inclusion_tag)
@inclusion_tag('模板路径',name='重命名')
def my_in(): # 不写,写多个,不写不传,写多个,按空格来传参
# 一堆逻辑处理,查数据库
ret=Book.object.all()
return {''books':ret}
# 在模板中:
可以用books这个变量,渲染页面
# 5.应用:
-在另一个模板中:
-{%load mytag.py%}
-{% my_in %}
二、defer与only
1、定义
defer ----> 除了指定字段之外
only ----> 只查询几个字段
2、使用
ret=Book.object.all().only('name')
# 等价于,id始终都会查
ret=Book.object.all().only('id','name')
3、注意点
ret=models.Author.objects.only('nid')
for i in ret:
# 查询的name不在的ret中,会再次查询数据库,造成数据库压力大
print(i.name)
三、事务
1、原子性操作
2、语法
from django.db import transition
with transition.atomic():
sql1
sql2
四、choice
1、定义
模型表中某个字段,可以指定choice,用在选择不经常变的情况,经常变,尽量用数据库
2、使用
# db_constraint 是否在数据库中创建外键约束,默认为True
user_type=models.ForeignKey(to='Info', to_field='id',db_constraint=False)
#取出对应的汉字
# author对象.user_type.name
mychoice=((1,'男'),(2,'女'),(3,'其他'))
# dd = models.ForeignKey(to='Info', to_field='id')
#取出对应的汉字
dd = models.ForeignKey(choices=mychoice)
五、多对多创建第三张表
1、多对多的操作
https://www.cnblogs.com/linagcheng/p/9953252.html
2、三种方法创建第三张表
(1)手动创建第三张表(不创建关联关系)
# 手动创建第三张表(不创建关联关系)
class Book(models.Model):
# 默认会创建id
name = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
id = models.AutoField(primary_key=True)
book=models.ForeignKey(to='Book',to_field='id')
author=models.ForeignKey(to='Author',to_field='id')
# 不管是插入和查询,删除,都很麻烦(一般不用)
(2)自动创建第三张表
# 自动创建第三张表
查询,插入,删除,都很方便
缺点:字段是固定的,第三张表如果要添加字段,实现不了
(3)手动创建第三张表,建立关联关系
class Book(models.Model):
# 默认会创建id
name = models.CharField(max_length=32)
# 中介模型,手动指定第三张中间表是
authors=models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
id = models.AutoField(primary_key=True)
book=models.ForeignKey(to='Book',to_field='id')
author=models.ForeignKey(to='Author',to_field='id')
# through:来指定我的第三张表是哪个
# through_fields:('book','author'),第一个值是:从中间表找到设置关联字段的表,通过哪个字段,第一个位置就写它
# 终极总结:防止混了:关联字段就是表名小写,第一个值:就是当前表的表名小写
# 查询,新增,删除,都很方便
# 第三张表,可以添加别的字段
Django框架(十二)—— 补充:inclusion_tag、defer、only、choice、事务、创建多对多的第三张表的更多相关文章
- Django框架(十一)-- 补充:inclusion_tag、defer、only、choice、事务、创建多对多的第三张表、mvc和mtv模式
一.inclusion_tag 1.作用 用于生成HTML片段,是数据由参数传入而变成动态 2.使用 # 1.app下新建一个模块,templatetags # 2.创建一个py文件(mytag.py ...
- $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)
自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...
- django orm 多对多自定义第三张表
# -*- coding: utf-8 -*-# Generated by Django 1.11.11 on 2018-09-02 08:07from __future__ import unico ...
- django 多对多自定义第三张表时的注意事项
杂交(自定义第三张表+ManyToManyField) # modles.py class Boy(models.Model): name = models.CharField(max_length= ...
- Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)
1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...
- Django:常用字段、手动自动第三张表单、元信息
一.常用字段和非常用字段 二.手动,自动创建第三张表 三.元信息 四.defer和only 一.常用字段和非常用字段 -常用字段 AutoField int自增列,必须填入参数 primary_key ...
- Django之modles 多对多创建第三张表
一.第一种:纯自动创建第三张表 纯自动 class Book(models.Model): title = models.CharField(max_length=32) price = models ...
- Django之多对多表之through第三张表之InlineModelAdmin后台内嵌
话不多说,来看表结构 这里有两个表,一个是阶段表,一个是老师表,一个老师可以带多个阶段,一个阶段也可以由多个老师带,所以是多对多关系 # 阶段表 class Stage(models.Model): ...
- Django框架(十) Django之模型进阶
QuerySet对象 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. Entry.objects.all()[:5] # (LIMI ...
随机推荐
- cs224d 作业 problem set1 (二) 简单的情感分析
使用在上一篇博客中训练好的wordvector 在这一节进行情感分析. 因为在上一节中得到的是一个词就是一个向量 所以一句话便是一个矩阵,矩阵的每一列表示一个词向量 情感分析的前提是已知一句话是 (超 ...
- 如何将Vue项目部署到Nginx 服务器中
https://blog.csdn.net/qq_35366269/article/details/91385689
- 多条件异步搜索+分页(PHP、 AJAX、ThinkPHP)
项目中遇到的多条件异步查询及数据分页问题,做了数次尝试,最终虽目的达到,略有繁琐,希望能有更好的处理方式 基于 tp框架 1.html页面代码 <div class="h_cityNa ...
- 【react】---redux-actions的基本使用---【巷子】
一.安装 cnpm install --save redux-actions 二.为什么使用 redux-actions reducer使用switch case语句进行action类型判断,当act ...
- dcoker镜像的分层
镜像分层的好处:复用节省磁盘空间,相同的内容只需加载一份到内存 修改dockerfile之后,再次构建速度加快 docker优化: 1.尽可能地选择体积小的linux发行版,比如alpine 2.尽可 ...
- linux下文件编码格式转换方法(gb18030/utf-8)
文章转载自:http://www.firekyrin.com/archives/249.html linux下文件编码格式转换方法(gb18030/utf-8) 在Linux做开发或者系统管理遇到乱 ...
- 迭代器,生成器,yield,yield from理解
迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...
- [USACO14MAR]浇地Watering the Fields
题目描述 Due to a lack of rain, Farmer John wants to build an irrigation system tosend water between his ...
- linux每日命令(4):解压命令
1) Ubuntu 16.04 已经自动安装了unzip 软件,解压命令: unzip FileName.zip 2) 如果没有安装unzip,可以使用下面的命令安装: sudo apt instal ...
- http(python)
1.client 1) httpie http -f POST example.org hello=World http POST http://192.168.200.251:55101/Api/C ...