Django--models多对多
多对多--ManyToMany
应用场景
在某表中创建一行数据时,有一个可以多选的下拉框(一对一是单选框)
例如:创建用户信息,需要为用户指定多个爱好
创建表
两种方法,一个是利用Django自动为多对多创建关联的第三张表,另一种是自己手动创建关系表。
NO.1
根据Django中的代码,自动为多对多表创建一个第三张表对应关系
|
1
2
3
4
5
6
7
8
|
class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerField()class HostAdmin(models.Model): username = models.CharField(max_length=32) email = models.CharField(max_length=32) host = models.ManyToManyField(Host) |
NO.2
自定义多对多表,没有ORM都是自己生成
models.py
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class Host1(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerField()class HostAdmin1(models.Model): username = models.CharField(max_length=32) email = models.CharField(max_length=32) host = models.ManyToManyField(Host1, through='HostRelation')class HostRelation(models.Model): c1 = models.ForeignKey(Host1) c2 = models.ForeignKey(HostAdmin1) |
view.py
|
1
2
3
4
5
6
7
8
9
|
#多对多自定义创建表 models.HostRelation.objects.create( c1=models.Host1.objects.get(id=1), c2=models.HostAdmin1.objects.get(id=2) ) models.HostRelation.objects.create( c1_id=2, c2_id=1 ) |
创建数据
|
1
2
3
4
5
6
7
|
初始化数据 models.Host.objects.create(hostname='c1',port=80) models.Host.objects.create(hostname='c2',port=80) models.Host.objects.create(hostname='c3',port=80) models.HostAdmin.objects.create(username='root',email='1@live.com') models.HostAdmin.objects.create(username='dali',email='dali@live.com') models.HostAdmin.objects.create(username='haojie',email='haojie@live.com') |
添加数据
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#正向添加 #目的,给大力分配两个主机的管理权限 #1、获取大力用户 admin_obj = models.HostAdmin.objects.get(username='dali') #2、获取指定的两个主机 host_list = models.Host.objects.filter(id__lt=3) #3、将两个主机和大力添加到第三张对应表中 admin_obj.host.add(*host_list) #反向添加 host_obj = models.Host.objects.get(id=3) admin_list = models.HostAdmin.objects.filter(id__gt=1) host_obj.hostadmin_set.add(*admin_list) |
查询数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#查询数据 #第一种方式 #正向查 admin_obj = models.HostAdmin.objects.all(id=1) for item in admin_obj: item.host.all() #反向查 host_obj = models.Host.objects.get(id=1) host_obj.hostadmin_set.all() #第二种方式 relation_list = models.HostRelation.objects.all() relation_list = models.HostRelation.objects.filter(c2__username='dali') for item in relation_list: print item.c1.hostname print item.c2.username |
Django--models多对多的更多相关文章
- day20 Django Models 操作,多表,多对多
1 Django models 获取数据的三种方式: 实践: viwes def business(request): v1 = models.Business.objects.all() v2 = ...
- django models 类型整理 version:1.8.3
django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...
- django models 数据库操作
django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...
- Django中多对多关系的orm表设计
作者的管理 1.设计表结构 出版社 书籍 作者 一个出版社出版多个书籍 1对多 书籍和作者的关系:一个作者写多本书,一本书可以是多个作者写.多对多 1)创建一张表,表中多对多的数据关系.使用 多对多 ...
- Python - Django - ORM 多对多表结构的三种方式
多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...
- django models中的class meta
Django models中的meta选项 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model ...
- Django models 操作高级补充
Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra
- Django models Form model_form 关系及区别
Django models Form model_form
- Django models .all .values .values_list 几种数据查询结果的对比
Django models .all .values .values_list 几种数据查询结果的对比
- django models数据类型
Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...
随机推荐
- nginx+winsw windows服务
1.下载Nginx:http://nginx.org/en/download.html 2.下载winsw配置包:http://files.cnblogs.com/files/objecttozero ...
- 图解,为多个oracle数据库下添加ArcSde实例
最开始肯定要先建一个oracle数据库,我假设名称为dbgis 1, 2, 3, 不重新指定就会出现这个错误,因为以前有sde.dbf文件了 4, 5, 6, 7, 8, 如果以前授权成功过就会出现这 ...
- PostgreSQL基础整理(二)
存储过程 实现功能:针对工资表30岁以下,工资提升10% 30至40提升20% 40以上提升30% + 奖金(入参)返回平均薪酬 创建表: DROP TABLE emps; CREATE TABLE ...
- 分享一个简单程序(webApi+castle+Automapper+Ef+angular)
前段时间在周末给朋友做了一个小程序,用来记录他们单位的一些调度信息(免费,无版权问题).把代码分享出来.整个程序没有做任何架构.但是麻雀虽小,用到的技术也没少.WebApi+Castle+AutoMa ...
- DeviceOne接受了DevStore的专访
DevStore隶属深圳尺子科技有限公司,DevStore所有内容(资讯.数据.工具|服务.资源文章.问答……)都贯穿整个项目的生命周期,无论你是设计人员.开发人员.推广人员还是运营人员都可在此找到你 ...
- Javascript事件模型系列(一)事件及事件的三种模型
一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...
- IOS 手势-轻点、触摸、手势、事件
1.概念 手势是从你用一个或多个手指接触屏幕时开始,直到手指离开屏幕为止所发生的所有事件.无论手势持续多长时间,只要一个或多个手指仍在屏幕上,这个手势就存在. 触摸是指把手指放到IOS设备的屏幕上,从 ...
- ios 向工程里添加Fonts
ios 向工程里添加Fonts 1.网上搜索字体文件(后缀名为.ttf,或.odf),假如你加入的字体为微软雅黑 2.把字体库导入到工程的resouce中 3.然后在你的工程的Info.plist文件 ...
- 爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文
回到目录 我们知道mvc里有一些过滤器,AuthorizeAttribute用来做授权,一般在用户授权方面可以使用它,当使用没有登陆,我们直接跳到登陆页,这是没有问题的,可我要说的是,当用户对某个Ac ...
- Atitit 图像金字塔原理与概率 attilax的理解总结qb23
Atitit 图像金字塔原理与概率 attilax的理解总结qb23 1.1. 高斯金字塔 ( Gaussianpyramid): 拉普拉斯金字塔 (Laplacianpyramid):1 1.2 ...