创建多对多:
            方式一:自定义关系表
                class Host(models.Model):
                    nid = models.AutoField(primary_key=True)
                    hostname = models.CharField(max_length=32,db_index=True)
                    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                    port = models.IntegerField()
                    b = models.ForeignKey(to="Business", to_field='id')
                    # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                    # 2
 
                class HostToApp(models.Model):
                    hobj = models.ForeignKey(to='Host',to_field='nid')
                    aobj = models.ForeignKey(to='Application',to_field='id')
 
 
                # HostToApp.objects.create(hobj_id=1,aobj_id=2)                这里可以直接对第三张表直接操
 
            方式二:自动创建关系表
                class Host(models.Model):
                    nid = models.AutoField(primary_key=True)
                    hostname = models.CharField(max_length=32,db_index=True)
                    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                    port = models.IntegerField()
                    b = models.ForeignKey(to="Business", to_field='id')
                    # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                    r = models.ManyToManyField("Host")                  -------------->  appname_application_r   表名
 
                无法直接对第三张表进行操作
                只能间接操作————————————————————
                obj = models.Application.objects.get(id=1)
                obj.name
 
                # 第三张表操作:HostToApp table         基于id=1的Application添加对应关系
                obj.r.add(1)                                增
                obj.r.add(2)
                obj.r.add(2,3,4)
                obj.r.add(*[1,2,3,4])
 
                obj.r.remove(1)                           删
                obj.r.remove(2,4)
                obj.r.remove(*[1,2,3])
 
                obj.r.clear()                   清除app_id =1 的列
 
                obj.r.set([3,5,7])                           改                set将原来数据库中的关系先全部删除,在添加1-3,1-5,1-7
                ——————————————————————————
                # 所有相关的主机对象“列表” QuerySet
                obj.r.all()            obj.filter()  obj.first()
                前端取
                        {%for app in app_list%}
                                        <tr>
                                                  <td>{{app.name}}</td>
                                                   <td>{{app.r.all}}</td>
                                         </tr>
                        {%endfor%}   
 
 

Django学习-9-ORM多对多操作的更多相关文章

  1. Django学习手册 - ORM 多对多表

    定义表结构: class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerFie ...

  2. Django 学习 之ORM多表操作

    一.创建模型 1.模型关系整理 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建 ...

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

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

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

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

  5. Django框架06 /orm多表操作

    Django框架06 /orm多表操作 目录 Django框架06 /orm多表操作 1. admin相关操作 2. 创建模型 3. 增加 4. 删除 5. 修改 6. 基于对象的跨表查询 7. 基于 ...

  6. Django框架05 /orm单表操作

    Django框架05 /orm单表操作 目录 Django框架05 /orm单表操作 1. orm使用流程 2. orm字段 3. orm参数 4. orm单表简单增/删/改 5. orm单表查询 5 ...

  7. day 46 Django 学习3 数据库单表操作以及反向解析

    前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变         2:反向解析之 ...

  8. 18-2 djanjo中间件和orm多对多操作,以及ajax

    一  中间件 0 怎样使用中间件 在setting配置文件里面注册你的中间件,如下: 'mymiddleware.MD1', 前面是文件名,后面是类名 然后在你的mymiddleware文件里导入: ...

  9. django框架基础-ORM跨表操作-长期维护

    ###############    一对一跨表查询    ################ import os if __name__ == '__main__': os.environ.setde ...

  10. Django框架之ORM对表结构操作

    ORM的优点:(1)简单,不用自己写SQL语句 (2)开发效率高 ORM的缺点:对于不同的人写的代码,执行效率有差别 ORM的对应关系: 类  ---------->  数据表 对象------ ...

随机推荐

  1. Mybatis异常There is no getter for property named 'XXX' in 'class com.xxx.xxx.UserAccountDTO

    mybatis报错异常信息如下: 解决: 在接口中加上注解:@Param("userAccountDTO"),如图

  2. SpringMVC源码情操陶冶-DispatcherServlet父类简析

    阅读源码有助于陶冶情操,本文对springmvc作个简单的向导 springmvc-web.xml配置 <servlet> <servlet-name>dispatch< ...

  3. 序列化与transient

    满足下面四个条件中的一个的类就不应该被序列化:  1.一个类与本地代码(native code)有紧密的关系,如java.util.zip.Deflater,这个类中很多都是native的. 2.对象 ...

  4. cglib应用

    JDK的动态代理,经常被用来动态地创建对象的代理.JDK的动态代理用起来非常简单,但是有一个限制,就是使用动态代理的对象必须实现一个或多个接口.如果想代理没有实现接口,还可以使用cglib包来完成代理 ...

  5. BZOJ 2986: Non-Squarefree Numbers [容斥原理 二分]

    题意:求第$n \le 10^{10}$个不是无平方因子数 二分答案, 容斥一下,0个质数的平方因子-1个..... 枚举$\sqrt$的平方因子乘上莫比乌斯函数,最后求出无平方因子数的个数取补集 # ...

  6. BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]

    以后再也不做$World Final$的题了................ 还我下午 bzoj上TLE一次后就不敢交了然后去uva交 Claris太神了代码完全看不懂 还有一个代码uva上竟然WA了 ...

  7. BZOJ 4566: [Haoi2016]找相同字符 [后缀自动机]

    4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 275  Solved: 155[Submit][Statu ...

  8. MySQL学习记录(不断更新)

    MySQL设置数据集为UTF8仍无法输入中文的解决办法: 我们的机器默认为gbk,因此可在进入数据库之前,使用以下这条语句将默认编码改为gbk,注意没有单引号,也不要用分号. mysql -uroot ...

  9. Sql server 卸载方法

    sql server不正确卸载时,重新安装会失败,会提示各种错误:如数据库实例已存在等... 下面是我摸索总结出来的卸载方法,以及重装失败后的处理方法: 卸载方法: 注意:SQL Server 200 ...

  10. 在C#中几种常见数组复制方法的效率对比

    原文是在http://blog.csdn.net/jiangzhanchang/article/details/9998229 看到的,本文在原文基础上增加了新的方法,并对多种数据类型做了更全面的对比 ...