定义表结构:

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)
  #这条语句输入以后,会自动创建一个表。这里自动创建的表名为 app01_hostadmini_host,也就是第三张截图的表。

添加数据:

hostadmin表

host表

hostadmin_host 表

多表操作(正向查找 hostadmin表 → host表):

def index(request):
# 添加/关联数据:
#(找到第一张表的一条数据,然后再找到第二张表的数据,然后关联)
# 方式一:
# #admin表的一条数据
# admin_obj = models.HostAdmin.objects.get(username='A1')
# #host表中的一条数据
# host_list = models.Host.objects.filter(id__lt=4)
# #通过admin多对host键add增加
# admin_obj.host.add(*host_list)
#第二张表的数据之间关联第一张表的数据 # 方式二:
# obj = models.HostAdmin.objects.filter(id=2)
# obj.host.add(2)
#单个
#或
# obj.host.add(3, 4)
#元组
#或
# obj.host.add(*[2,3,4,5])
#字典
#通过id进行关联,id=2的数据关联第二张表的id 2 ,id 3 ,id 4,id 5 # 删除数据
# obj.host.remove(1)
# obj.host.remove(2,3)
# obj.host.remove(*[1,2,3,4]) # 清除数据
# obj.host.clear() # 更新数据
# obj.set([3,4,5])
# 注意,这样配置了以后,就只剩3,4,5 数据条目了,其他都被清除了。 # 单条查询
# admin_obj = models.HostAdmin.objects.get(username='A1')
# # print(admin_obj.host.all())
# for i in admin_obj.host.all():
# print(i,i.hostname) #查询所有
# admin_all_obj = models.HostAdmin.objects.all()
# for i in admin_all_obj:
# print(i.username)
# print("-"*3)
# for i2 in i.host.all():
# print(i2.hostname)
# print("*"*10)
#i.host.all()也是obj对象,要取得其中的数据用嵌套for循环。 return HttpResponse("OK")

单条查询 结果:

查询所有 结果:

小结:

ORM多表操作,通过定义的 :host = models.ManyToManyField(Host),进行跨表操作。★★★★

反向查询:

# #反向关联
# #host表中的数据
# host_obj = models.Host.objects.get(id=3)
# #admin 表中的数据
# admin_list = models.HostAdmin.objects.filter(id__gt=3)
# #通过hostadmin_set 增加一条关联
# host_obj.hostadmin_set.add(*admin_list) # 反向查询
# 查询:
# host_obj = models.Host.objects.get(hostname="B2")
# print(host_obj.hostname)
# for i in host_obj.hostadmin_set.all():
# print(i.username) # 区别总结:区别在于正向查拥有自己创建好的host句柄,可以直接使用add方法添加,而反向查没有,所以要使用django为我们提供的set句柄。

Django学习手册 - ORM 多对多表的更多相关文章

  1. Django学习手册 - ORM 数据创建/表操作 汇总

    ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...

  2. Django学习手册 - ORM数据类型

    DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...

  3. Django学习手册 - ORM 单表数据获取

    Django 单表数据的获取: 先建立数据表格 from django.db import models # Create your models here. class userinfo(model ...

  4. django 学习手册 - ORM 报错集(随时更新)

    报错问题: 问题一:(1050代码) django.db.utils.InternalError: (1050, "Table 'app01_group' already exists&qu ...

  5. Django学习手册 - ORM 外键

    Django 外键创建 关键语法: models.ForeignKey("UserGroup",to_field="gid",default=1,on_dele ...

  6. Django学习手册 - ORM sqlit基础数据库操作

    步骤阐述:( splitDB 是Django自带的一个数据库) 1.在APP01 中的 models.py 配置DB信息  userinfo 相当于数据表的表名,而 uname.pwd 相当于 表中的 ...

  7. Django学习手册 - ORM - ImageField数据类型

    前置步骤 setting.py文件配置: 添加app目录 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'djan ...

  8. Django学习手册 - ORM choice字段 如何在页面上显示值

    在module操作过程中使用choice字段: 核心: obj.get_字段名_display 定义module 数据结构: class msg(models.Model): choice = ( ( ...

  9. Django 学习 之ORM聚合查询分组查询与F查询与Q查询

    一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...

随机推荐

  1. request 请求头的处理

    一.请求头:说明了请求要带的一些说明,有的请求需要带,有的不需要带 一般会带上格式,对于新浪微博来说,他一定要带上user-agent content-type:application/json 二. ...

  2. eclipse添加market ,maven

    添加market 转载自http://blog.csdn.net/buptdavid/article/details/42423247 Eclipse Marketplace是个插件应用商店,很实用的 ...

  3. Linux之LVS 20180708

    LVS负载均衡项目,是Linux开源项目中专门用于负载均衡的,主要应用在client访问server时,通过LVS来分配对应的server来响应client的请求.client访问时,都是访问的LVS ...

  4. (count 或直接枚举) 统计字符 hdu1860

    统计字符(很水) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1860 Time Limit: 1000/1000 MS (Java/Others)    ...

  5. (set)产生冠军 hdu2094

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. 《Apache kafka实战》读书笔记-kafka集群监控工具

    <Apache kafka实战>读书笔记-kafka集群监控工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如官网所述,Kafka使用基于yammer metric ...

  7. Linux记录-GC分析

    查看gc情况: jstat -gc PID 刷新频率 jstat -gc 12538 5000 导出堆内存dump 文件: jmap -dump:file=文件名.bin [pid] 导出线程dump ...

  8. cmd命令查看当前IIS运行的网站iisapp appcmd

    xp,2003中用的命令是:iisapp -a 2007,2008,2012系统中: cmd命令行进入%windir%\system32\inetsrv\目录下 运行appcmd.exe list w ...

  9. mysql关联模糊查询他表字段

    如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...

  10. Tomcat虚拟路径访问本地图片失败的问题

    开发过程中,把图片放在本地一个磁盘的路径下.网上搜了下,可以使用tomcat虚拟路径访问本地图片. 这样就不用把图片放在整个项目的webapp目录下了. 1.找到tomcat的server.xml文件 ...