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字段
  • 相关阅读:
    数据库操作
    用php输出心形曲线
    Hibernate入门(一)
    JavaScript中的三种弹窗
    java过滤器(过滤器排序)
    java过滤器(简化认证)
    Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
    java回调函数学习
    继承
    多态(一)
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12732187.html
Copyright © 2011-2022 走看看