一对多:
如果有A表和B表,关联属性在那个表A中。
正向查询:A---->B
# 一对多的正向查询:查询三国演义这本书的出版社的名字 book_obj = models.Book.objects.filter(title='三国演义').first() print(book_obj.publish) # 与这本书关联的出版社对象 print(book_obj.publish.name) # 从出版社对象中获取出版社的名字
反向查询:B---->A
# 一对多的反向查询:查询人民出版社出版过的书籍名称
publish_obj = models.Publish.objects.filter(name='人民出版社').first() ret = publish_obj.book_set.all() # 对象.表名_set.all() print(ret) # 查询到的书籍的对象 print(ret.values('title')) # 拿出书籍对象中的title字段。
多对多:
如果有A表和B表,关联属性在那个表A中。
正向查询:A---->B
# 查询aaaaa的作者的名字 book_obj = models.Book.objects.filter(title="aaaaa").first() author_list = book_obj.authors.all() # 关联的所有作者的对象的集合。 print(author_list) # 是一个列表 print(author_list[0].name, author_list[1].name) # 从列表中拿出每一个对象,然后获取对象中的name字段
反向查询:B---->A
# 查询主宰出版过的所有书籍的名称 author_obj = models.Author.objects.filter(name="主宰").first() ret = author_obj.book_set.all() # 作者对象.表明_set.set.all() print(ret) # 查询到的书籍对象 print(ret[0].title, ret[1].title) # 从书籍对象能获取书籍的名称
一对一:
如果有A表和B表,关联属性在那个表A中。
正向查询:A---->B
# 查询作者女娲的地址信息 author_obj = models.Author.objects.filter(name="女娲").first() ret = author_obj.authordetail # 作者表对象.字段 print(ret) # 详情信息对象 print(ret.addr) # 从对象中获取地址信息
反向查询:B---->A
# 查询地址为北京的作者名字 obj = models.AuthorDetail.objects.filter(addr="北京").first() ret = obj.author # 对象.表名 print(ret) # 查询到的作者表对象 print(ret.name) # 从对象中获取name字段