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 ...
随机推荐
- 自定义QGraphicsItem
简述: QGraphicsItem 是场景中 item 的基类.图形视图提供了一些典型形状的标准 item,例如:矩形 ( QGraphicsRectItem ).椭圆 ( QGraphicsElli ...
- STM32 USB 鼠标+键盘 串口控制
*MOS0101000000# 鼠标左键按下 *MOS0102000000# 鼠标右键按下 *MOS0103000000# 鼠标中键按下 *MOS0100000000# 鼠标抬起 *MOS01000a ...
- hibernate-第一章-基础
一,简介 hibernate是一个开源的ORM框架,它对我们的jdbc进行了轻量级的对象封装,它将我们的POJO与数据库表简历映射关系,是一个全自动的ORM框架;hibernate可以自动生成SQL语 ...
- POSIX共享内存
DESCRIPTION 共享内存是最快的可用IPC形式.它允许多个不相关(无亲缘关系)的进程去访问同一部分逻辑内存. 如果需要在两个进程之间传输数据,共享内存将是一种效率极高的解决方案.一旦这样的内存 ...
- kubernets HA集群手动部署
来源: https://www.cnblogs.com/yangxiaoyi/p/7606121.html http://blog.51cto.com/newfly/2288088?source= ...
- EJS 入门学习
EJS(Embedded JavaScript templates)是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本.可以说EJS是一个JavaScript库,EJS可以同时运行在客 ...
- java笔记:排错5:误删maven target:恢复不了,怎么再生成
上篇讲过,误删maven项目的target,或clean以后,target文件夹会删掉. 想要重新加载模块生成最新的target目录,可以再跑一下tomcat. 但有时不灵,可能是因为Tomcat本身 ...
- Vue-Router嵌套路由
1:查看router-view所对应的位置,是属于顶级出口还是存在于某个组件当中 2:当router-view存在于某个组件当中时 const User = { template: ` <div ...
- A - A Secret -扩展KMP
题目大意: 给你两个字符串A,B,现在要你求B串的后缀在A串中出现的次数和后缀长度的乘积和为多少. 题解: 扩展KMP模板题,将A和B串都逆序以后就变成了求前缀的问题了,扩展KMP求处从i位置开始的最 ...
- ISP PIPLINE (十一) color correction
什么是color correction? 为什么要进行color correction? 转换后的色彩饱和度更加明显,更加符合人眼感官. 如何进行color correction? 下图是步骤: 第一 ...