博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django学习-9-ORM多对多操作
阅读量:4946 次
发布时间:2019-06-11

本文共 1596 字,大约阅读时间需要 5 分钟。

创建多对多:
            方式一:自定义关系表
                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%}   
 
 

转载于:https://www.cnblogs.com/cq146637/p/7806332.html

你可能感兴趣的文章
java.sql.SQLException: Locale not recognized处理
查看>>
BZOJ 2953 POI2002 商务旅行
查看>>
python日期模块
查看>>
笔记54 Mybatis快速入门(五)
查看>>
网站搭建 (第04天) 导航栏与页脚
查看>>
Redis通过Lua一次获取多个key值
查看>>
android EditText不弹出软键盘
查看>>
php将数组写入配置文件
查看>>
ALV 报表
查看>>
Spring+Quartz实现定时任务的配置方法
查看>>
同时启动多个tomcat服务器
查看>>
怎么将iphone上的照片导出到本地文件
查看>>
Repeater+DataPagerSource分页
查看>>
模块化导出
查看>>
pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
查看>>
H5小知识
查看>>
面包屑之javascript声明期与执行期的故事
查看>>
作为程序员的你,必须掌握的21个Java核心技术!
查看>>
Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
查看>>
自定义orgmode中加粗字体的颜色
查看>>