python 外键用法 多对多关系 ORM操作 模板相关
一.app/models中写类(设计表结构)
1.普通类
class A(models.Model):
id=modles.AutoField(primary_key=True)
name=models.CharField(max_length=32,unique=True)
2.设置外键
class B(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, unique=True)
a=models.ForeignKey(to=A,on_delete=models.CASCADE) B必须写在A后面
a=models.ForeignKey(to='A',on_delete=models.CASCADE) 加引号可以不按顺序写
def __repr__(self):
return "<B object: {}>".format(self.name)
3.设计多对多关系表
class C(models.Model):
name=models.CharField(max_length=32,unique=True)
bs=models.ManyToManyField('B')
def __repr__(self)
return "<C object: {}>".format(self.name)
__str__=__repr__
二.ORM操作
1.查
models.A.objects.get(id=1,name='xx') # 获取一个对象 —— 》一个对象 没有或多个会报错
models.A.objects.all() #获取所有对象 —— 》queryset 对象列表
models.A.objects.all().order_by('-id') #获取所有对象 —— 》queryset 对象列表 并排序
models.A.object.filter(id=1,name='xx') 获取满足条件的所有对象 —— 》queryset 对
相关属性
普通类:对象.id
对象.name
外键:
对象.id
对象.name
对象.a----->相关联的a对象
对象.a_id --->相关联的a对象的id
多对多:
对象.id
对象.name
对象.bs ------>获得管理对象
对象.bs.all----> 获取全部内容
2.增
普通:
new-obj=models.A.objects.create(name='新的出版社名字')
外键:
b_obj=models.B.objects.create(title='新的书名',a=a_obj)
b_obj=models.B.objects.create(title='新的书名',a_id=a_obj.id)
多对多:
c_obj = models.C.objects.create(name='作者名字')
c_obj.bs.set([1,3,5])
3.删
删除一条
models.A.objects.get(id=1,name='xx').delete()
删除全部
models.A.objects.all().delete()
4.改
普通:
a_obj.name="新名字"
a_obj.save()
外键;
b_obj.name="新名字"
b_obj.a=a_obj
b_obj.a_id=a_obj.id
b_obj.save()
多对多
c_obj.name='新名字'
c_obj.save()
c_obj.bs.set([1,2,3])
三.模板相关
render(request,'模板名字',{'new_name':'新华出版社','err_meg':'出版社已存在'})
{{ 变量名 }} {{ new_name}} 新华出版社
标签(与逻辑相关)
{% for a in a_list %}
{{ forloop.counter }}
{{ a.id }}
{{a.name }}
{% endfor%}
python 外键用法 多对多关系 ORM操作 模板相关的更多相关文章
- SQLAlchemy03 /外键、连表关系
SQLAlchemy03 /外键.连表关系 目录 SQLAlchemy03 /外键.连表关系 1.外键 2.ORM关系以及一对多 3.一对一的关系 4.多对多的关系 5.ORM层面的删除数据 6.OR ...
- SQLAlchemy(三):外键、连表关系
SQLAlchemy03 /外键.连表关系 目录 SQLAlchemy03 /外键.连表关系 1.外键 2.ORM关系以及一对多 3.一对一的关系 4.多对多的关系 5.ORM层面的删除数据 6.OR ...
- django admin 或xdmin list_display search_fields list_filter 如果显示搜索外键或多对多字段
model class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50, verbose_name=u&qu ...
- Django中ORM外键和表的关系(Django编程-4)
外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来 ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- 三十七:数据库之SQLAlchemy外建之多对多关系
准备工作 from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKeyfrom sqla ...
- python---ORM之SQLAlchemy(3)外键与relationship的关系
relationship是为了简化联合查询join等,创建的两个表之间的虚拟关系,这种关系与标的结构时无关的.他与外键十分相似,确实,他必须在外键的基础上才允许使用 不然会报错: sqlalchemy ...
- 完整性约束&外键变种三种关系&数据的增删改
完整性约束 本节重点: not null 与 default unique primary auto_increment foreign key 一.介绍 约束条件与数据类型的宽度一样,都是可选参数 ...
- java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))
hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...
随机推荐
- stderr和stdout详细解说
今天又查了一下fprintf,其中对第一个参数stderr特别感兴趣. int fprintf(FILE *stream,char *format,[argument]): 在此之前先区分一下:pri ...
- 基于python的WGS84转百度坐标
from urllib.request import urlopen, quote import json def wgs84tobaidu(x,y): data=str(x)+','+str(y); ...
- python脚本--mysql数据库升级、备份
在公司经常要做测试环境的升级.备份.维护:升级后台的应用,不可避免要进行数据库的升级与备份,花了一个上午琢磨了一个脚本分享给大家. ToB的业务,在做环境维护的时候,有初始化环境和增量升级的环境,在测 ...
- 关联管理器(RelatedManager)
一.class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: 1.一对多 ForeignKey关系的“另一边” ...
- git增加子模块
要拉取GIT代码时,有时候需要拉取多个GIT模块,一起配合使用: 1.下载主模块: git clone -b master http://username:passwd@git.wondershare ...
- html网页引用中文字体,解决加载缓慢办法
[ttf 压缩]html网页引用中文字体,文件过大,加载缓慢的解决办法[字蛛][web font] [字蛛]http://font-spider.org/ 先安装好 NodeJS,然后执行: npm ...
- python 上台阶
题目描述: 有一楼梯共m级,刚开始在第一级,若每次只能跨上一级或两级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法 ''' 有一楼梯共m级,刚开始在第一级,若每次只能跨上一级或两级,要 ...
- WPF自定义轮播控件
闲得蛋疼做了一个WPF制作轮播动画(随机动画),勉强可以看,写个随笔留个脚印. 效果图:
- 从Jensen不等式到Minkowski不等式
整理即证 参考资料: [1].琴生不等式及其加权形式的证明.Balbooa.https://blog.csdn.net/balbooa/article/details/79357839.2018.2 ...
- C&C++ Calling Convention
tkorays(tkorays@hotmail.com) 调用约定(Calling Convention) 是计算机编程中一个比较底层的设计,它主要涉及: 函数参数通过寄存器传递还是栈? 函数参数从左 ...