书籍表Book:title、price、pub_date、publish(外键,多对一)、authors(多对多)
出版社表Publish:name、city、email
作者表Author:name、age、au_detail(一对一)
作者详情表AuthorDetail:gender、tel、addr、birthday
以下是表格关联说明:
我们在MySQL中执行以下SQL插入操作:
方式一:传对象的形式,返回值的数据类型是对象,书籍对象。
步骤:
方式二:传对象id的形式(由于传过来的数据一般是id,所以传对象id是常用的)。
一对多中,设置外键属性的类(多的表)中,MySQL中显示的字段名是:外键属性名_id。
返回值的数据类型是对象,书籍对象。
方式一:传对象形式,无返回值。
方式二:传对象id形式,无返回值。
前提:
语法格式:
正向:属性名反向:小写类名加_set注意:一对多只能反向
常用方法:
add():用于多对多,把指定的模型对象添加到关联对象集(关系表)中。
注意:add()在一对多(即外键)中,只能传对象(*QuerySet数据类型),不能传id(*[id表])。
*[]的使用:
反向:小写表名_set
create():创建一个新的对象,并同时将它添加到关联对象集之中。
返回新创建的对象。
remove():从关联对象集中移除执行的模型对象。
对于ForeignKey对象,这个方法仅在null=True(可以为空)时存在,无返回值。
clear():从关联对象集中移除一切对象,删除关联,不会删除对象。
对于ForeignKey对象,这个方法仅在null=True(可以为空)时存在。
无返回值。
基于对象的跨表查询。
正向:属性名称反向:小写类名_set一对多查询主键为1的书籍的出版社所在的城市(正向)。
查询明教出版社出版的书籍名(反向)。
反向:对象.小写类名_set(pub.book_set)可以跳转到关联的表(书籍表)。
pub.book_set.all():取出书籍表的所有书籍对象,在一个QuerySet里,遍历取出一个个书籍对象。
正向:对象.属性(author.au_detail)可以跳转到关联的表(作者详情表)
查询所有住址在黑木崖的作者的姓名(反向)。
一对一的反向,用对象.小写类名即可,不用加_set。
反向:对象.小写类名(addr.author)可以跳转到关联的表(作者表)。
菜鸟教程所有作者的名字以及手机号(正向)。
正向:对象.属性(book.authors)可以跳转到关联的表(作者表)。
查询任我行出过的所有书籍的名字(反向)。
查询菜鸟出版社出版过的所有书籍的名字与价格。
反向:通过小写类名__跨表的属性名称(book__title,book__price)跨表获取数据。
查询任我行出过的所有书籍的名字。
正向:通过属性名称__跨表的属性名称(authors__name)跨表获取数据:
res=models.Book.objects.filter(authors__name="任我行").values_list("title")反向:通过小写类名__跨表的属性名称(book__title)跨表获取数据:
查询任我行的手机号。
正向:通过属性名称__跨表的属性名称(au_detail__tel)跨表获取数据。
反向:通过小写类名__跨表的属性名称(author__name)跨表获取数据。