博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一对多 多对多表查询
阅读量:4343 次
发布时间:2019-06-07

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

经典的例子:一本书有多个作者,一个作者有多本书,典型的多对多关系。

设计模型如下:

view plaincopy to clipboardprint?01.from django.db import models  02.  03.class Author(models.Model):  04.    first_name = models.CharField(max_length=30)  05.    last_name = models.CharField(max_length=40)  06.    email = models.EmailField()  07.      08.    def __unicode__(self):  09.        return self.name  10.      11.    class Meta:  12.        db_table = "author"       13.      14.class Book(models.Model):  15.    title = models.CharField(max_length=200)  16.    authors = models.ManyToManyField(Author)  17.      18.    def __unicode__(self):  19.        return self.title  20.      21.    class Meta:  22.        db_table = "book"

访问多值:

一本书的所有作者:

b = Book.objects.get(id=50)

b.authors.all()

b.authors.filter(first_name='Adam')

反向也可以,一个作者的所有书:

a = Author.objects.get(id=1)

a.book_set.all()

给多对多字段添加值(添加多对多关系):

a = Author.objects.get(id=1)

b = Book.objects.get(id=50)

b.authors.add(a)

从多对多字段中删除值(删除多对多关系):

 

a = Author.objects.get(id=1)

b = Book.objects.get(id=50)

b.authors.remove(a) 或者 b.authors.filter(id=1).delete()

 

 

一对多关系 = 外键用户组表1. ATG2. dragon3. OA4. SAP主机信息表c1pd001    1.1.1.1     1(ATG)c1pd002    1.1.1.2     2(ATG)c1pd003    1.1.1.3     3(ATG)c1pd004    1.1.1.4     4(ATG)原生sql    insert into  asset values(hostname='c1pd005',ip='1.1.1.5',groupid=1)django    1.获取用户表对象    2.插入主机表        groupid = models.UserGroup.object.get(id=groupId)    models.asset.object.create(username=username,password=password,user_group=groupid)    跨表查询    obj = models.asset.object.filters(user_group__Groupname = '用户组A')    多对多关系#############表结构############class UserInfo(models.Model):    name = models.CharField(max_length=32)class UserGroup(models.Model):    caption = models.CharField(max_length=64)    user_info = models.ManyToManyField('UserInfo')############################################################从UserGroup表操作,有user_info多对多user_info_obj = models.UserInfo.objects.get(name=u'feng')group_obj = models.UserGroup.objects.get(caption='CFO')group_obj.user_info.add(user_info_obj)     # 添加数据group_obj.user_info.remove(user_info_obj)  # 删除数据user_info_objs = models.UserInfo.objects.all()group_objs = models.UserGroup.objects.all()group_obj.user_info.add(*user_info_objs)     # 添加数据group_obj.user_info.remove(*user_info_objs)#########################################从UserInfo表操作# 添加数据#user_info_obj.usergroup_set.add(group_obj)#user_info_obj.usergroup_set.add(*group_objs) # 删除数据#user_info_obj.usergroup_set.remove(group_obj)#user_info_obj.usergroup_set.remove(*group_objs) # 获取数据#print group_obj.user_info.all()#print group_obj.user_info.all().filter(id=1)# 获取数据#print user_info_obj.usergroup_set.all()#print user_info_obj.usergroup_set.all().filter(caption='CEO')#print user_info_obj.usergroup_set.all().filter(caption='DBA')

 

转载于:https://www.cnblogs.com/fengjian2016/p/5377234.html

你可能感兴趣的文章
Equivalent Strings
查看>>
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>
Hibernate视频学习笔记(8)Lazy策略
查看>>
CSS3 结构性伪类选择器(1)
查看>>