zoukankan      html  css  js  c++  java
  • 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)
        ...
  • 相关阅读:
    UE4中集成ProtoBuf
    QT之打印 QPrinter
    qt界面嵌入外部进程界面
    QAxWidget 妙用
    UE4嵌入Qt5 三维可视化案例
    QSS入门(一)
    Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
    成品软件二次开发排第三,低代码的应用场景有哪些?
    React 并发功能体验-前端的并发模式已经到来。
    Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9403824.html
Copyright © 2011-2022 走看看