Django之跨表查询——正反向查询(ManyToManyField)

1.多对多查询:涉及到两张表以上的查询。

    author_obj = models.Author.objects.first()
    print(author_obj.name)
    # 查询金老板写过的书
    ret = author_obj.books.all()
    print(author_obj.books,type(author_obj.books))
    print(ret)

    # 1.create
    # 通过作者创建一本书,会自动保存
    # 做了两件事:
    # 1.在book表里创建一本新书;2.在作者和书的关系表中添加关联记录
    author_obj.books.create(title="金老板自传",publisher_id=2)
    # 2.add
    # 在金老板关联的书里面,再加一本id是4的书
    book_obj = models.Book.objects.get(id=4)
    author_obj.books.add(book_obj)
    # 3.添加多个
    book_objs = models.Book.objects.filter(id__gt=2)
    # 不可以直接add(book_objs)
    # 要把列表打散,再传进去
    author_obj.books.add(*book_objs)
    # 4.直接添加id
    author_obj.books.add(3)
    # 5.remove
    # 从金老板关联的书里面把开飞船 删掉
    book_obj = models.Book.objects.get(title="跟金老板学开飞船")
    author_obj.books.remove(book_obj)
    # 从金老板关联的书里面把id是8的记录删掉
    author_obj.books.remove(8)
    # clear
    # 清空
    # 把id=2的作者所关联的所有书都删掉
    author2_obj = models.Author.objects.get(id=2)
    author2_obj.clear()
    # 会提示:AttributeError: ‘Author‘ object has no attribute ‘clear‘

原文地址:https://www.cnblogs.com/cwj2019/p/11783144.html

时间: 2024-11-10 18:54:02

Django之跨表查询——正反向查询(ManyToManyField)的相关文章

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu

Django之跨表查询——正反向查询(ForeignKey)

1.正向查询和反向查询: 外键的查询操作: 正向查询: # 正向查询 # 基于对象,跨表查询 book_obj = models.Book.objects.all().first() ret = book_obj.publisher # 和我这本书关联的出版社对象 print(ret,type(ret)) ret = book_obj.publisher.name # 和我这本书关联的出版社对象的name属性 print(ret,type(ret)) # 查询id=1的书出版社名称 # 涉及到跨

Django之跨表查询及添加记录

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

[Django]下拉表单与模型查询

前言:本文主要针对自定义下拉表单制作,下拉表单的内容是取至于数据库,即动态实现下拉表单 正文: 动态实现下拉表单有两种方法: 一.自己手动写 html 模板中的 <form ...> </form> 在views 中,将所需要的数据传递过去,比如 names_list = [1, 2, 3, 4] 在 html 中 <select> {% for x in name_list %} <option value ="{{ x }}">{{

Django 跨表查询--神奇的双下划线和点

我在django的moles中创建了两个calss,如下: class Project(models.Model):     name = models.CharField(u'项目名称',max_length=32,blank=True)     id = models.CharField(u'项目ID',max_length=32,unique=True,primary_key=True,blank=True)     create_date = models.DateTimeField(u

Django Mysql数据库-基于双下划线的跨表查询

一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的 model 为止.(相当于用sql语句用join连接的方式,可以在settings里面设置,可查看sql语句) 数据库模型: class Book(models.Model): nid = models.AutoField(primary_key=Tru

django中的跨表查询梳理

1.前言 最近在写一个小项目,里面主要涉及的就是表与表之间复杂的关系.当真正开发起来的时候,才发现自己对复杂的表关系间的查询有点混乱,趁着这几天的时间,重新梳理了一下. 2.概念 在开始之前,先明确几个基础概念: 正向查询:关联字段所在的表查询其关联表叫正向查询 反向查询:未写关联字段的表查询其关联表叫反向查询 # 书籍表 class Book(models.Model): name = models.CharField(max_length=32) publish = models.Forei

django(3) 一对多跨表查询、多对多

1.一对多跨表查询获取数据的三种形式:对象.字典.元组 例:有host与business两张表,host与business的id字段关联,business在host表中的对象名是b,  通过查询host表获取的querySet中的b来查询business表. 以下两种方式都是操作host表: a.以对象的形式跨表查询,查询business表的数据:row.b.caption,row.b.id b.以字典和元组的形式跨表查询,查询business表的数据,跨表查询的时候要用双下划线  'b__id