Python学习---django多对多之Djanog默认表学习
案例一:
from django.db import models class Book(models.Model): name = models.CharField(max_length=33) # 创建数据,当然不在此处设置,制只做示例演示 # models.Book.objects.create(name='书名') class Author(models.Model): name = models.CharField(max_length=33) # Django此时帮我们生成第三张表 # 因为没有单独的第三张表的类,所以需要我们间接的操作 # 通过Book,Author都可以进行操作 m = models.ManyToManyField("Book") # 形同虚设,跟Book,Author表都没关系 # 创建数据,当然不在此处设置,制只做示例演示 # models.Author.objects.create(name='人名') # 正向查找数据[先找到人后根据obj.m查找书名] # 查询一: 消耗内存 author_obj = models.Author.objects.get(id=1) author_list = author_obj.m.all() # 获取这个人所写的全部书 for author in author_list: # 需要多次查找数据库,很消耗内存 print(author.name, author.m.all()) # 查询二: 联表一次查询所有的数据 author_obj = models.Author.objects.values("id", "m", "name") # 里面有m这个外键属性 author_obj2 = models.Author.objects.values("id", "m", "m__name" "name") # m可以联表取值 for item in author_list: # 查询到全部跟作者有关的书的ID[第三张表关联的就是ID] print(item['id'], item['name'], '书籍ID:', item['m']) # 反向查找数据 book_obj = models.Book.objects.get(id=1) # 先查找到书 book_obj.author_set.all() # 间接关联第三张表,查找书的作者 # 数据的添加 # 正向增加 obj = models.Author.objects.get(id=1) obj.m.add("可以添加Book的对象") # 不推荐,因为多了一次的查询次数 obj.m.add(5) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=5这个Book对象] obj.m.add(5, 6) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=5/6这个Book对象] obj.m.add(*[4, 5]) # 第三张表中添加数据[对应关系,表示obj对象关联了M表中id=4/5这个Book对象] # 数据的删除 obj = models.Author.objects.get(id=1) obj.m.remove(5) obj.m.remove(5, 6) obj.m.remove(*[5, 6]) # 数据的清空 obj = models.Author.objects.get(id=1) obj.m.clear() # 清空obj对象关联的所有数据 # 数据的更新 obj = models.Author.objects.get(id=1) # 必须是迭代对象 obj.m.set([1, ]) # 此时将book_id设置为1, author_id设置为1[因为获取的Author的ID是1] # set里面的值数据库内有则保留,没有则删除 obj.m.set([1, 4, 5]) # 此时将book_id设置为4,5 author_id设置为1[会删除原来的1] # 反向操作【其余同上】 obj = models.Book.objects.get(id=1) obj.author_set.add(1) obj.author_set.add(1, 2, 3, 4) ...
作者:小a玖拾柒
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!