zoukankan      html  css  js  c++  java
  • Django_基于对象——跨表查询

    一对多:

      如果有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字段
  • 相关阅读:
    hibernate的缓存机制
    [poj 3159]Candies[差分约束详解][朴素的考虑法]
    POJ 2773 Happy 2006
    给定一个循环链表,实现一个算法返回这个环的开始结点
    使用jQuery创建模态窗口登陆效果
    实战数据结构(3)_两个单链表间的合并操作
    sql的强大功能(看一条sql解决的复杂业务)
    uva 10905 Children's Game (排序)
    JFinal学习 & Gradle配置续 & Tomcat配置
    Gradle项目学习 & HttpAsyncClient学习 & CountDownLatch学习
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12732187.html
Copyright © 2011-2022 走看看