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 ...
随机推荐
- java8---lambda表达式
语法糖 lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块).Lambda表 ...
- IE兼容事件绑定V1.0
想要兼容IE678,少用原型,因为它们没有完全实现ECMA-262规范 (function(window){ //兼容IE678时少用原型,因为它没有完全遵循ECMA-262规范 //衬垫代码:isA ...
- C++入门篇十
静态成员变量:可以共享数据,类内声明,类外初始化(实现) // 静态成员变量.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &q ...
- Docker动态给容器Container暴露端口
查看Container的IP地址 docker inspect <container name or id>| grep IPAddress 查看Container的映射的端口 docke ...
- fastjson与net.sf.json区别
在现在的开发当中,绝大多数引用阿里巴巴的fastjson.当然net.sf.json同样可以使用. 一.引入net.sf.json包 首先用net.sf.json包,当然你要导入很多包来支持commo ...
- Celery提交任务出错?
跟着官方的入门教程部署和运行的,为啥报这个错? tasks.py # -*- encoding:UTF-8 -*- from celery import Celery brokers = 'redis ...
- Spark SQL UDAF示例
UDAF:用户自定义聚合函数 Scala 2.10.7,spark 2.0.0 package UDF_UDAF import java.util import org.apache.spark.Sp ...
- Log4j2入门
转载自:http://www.cnblogs.com/hzhuxin/p/6406272.html Log4j2 是 Log4j的升级版本,对其进行解压,可以看到以下几个jar包. log4j-1.2 ...
- EF|CodeFirst数据并发管理
在项目开发中,我们有时需要对数据并发请求进行处理.举个简单的例子,比如接单系统中,AB两个客服同时请求处理同一单时,应该只有一单请求是处理成功的,另外一单应当提示客服,此单已经被处理了,不需要再处理. ...
- Archiver 3 for Mac(解压缩工具) ,想压缩解压慢一点就这么难!
Archiver 3 for Mac是一款分割合并解压缩工具,简单实用且功能齐全,你只需简单的拖放文件就可以进行压缩,还可以设定解压密码,从而保护自己的隐私.如果文件很大你还可以切割文件.Archiv ...