zoukankan      html  css  js  c++  java
  • orm多表操作

    跨表查询是分组查询的基础

    一对多

    一对多查询(Publish 与 Book)

        

        正向查询(按字段:publish):关联属性字段所在的表查询被关联表的记录就是正向查询,反之就是反向查询

    # 查询三国的书籍的出版社所在的城市
    book_obj=Book.objects.filter(pk=1).first()
    # book_obj.publish 是主键为1的书籍对象关联的出版社对象,book对象.外键字段名称
    print(book_obj.publish.city)  

        反向查询(按表名:book_set,因为加上_set是因为反向查询的时候,你查询出来的可能是多条记录的集合):

    pub_obj=models.Publish.objects.get(name='人民出版社')
    print(pub_obj.book_set.all())
    # < QuerySet[ < Book: 三国 >, < Book: 三国2 >, < Book: 三国3 >, < Book: 三国4 >] >
    book_lst=pub_obj.book_set.all()
    # for book_obj in book_lst:
    # print(book_obj.title)
    print(book_lst[0].title)
    # 三国
    print(book_lst[0].price)
    # 100.00

    一对一

    一对一查询(Author与AuthorDetail) 

      

      正向查询(按字段:authorDetail):

    egon=Author.objects.filter(name="egon").first()
    print(egon.authorDetail.telephone) egon.authorDeail就拿到了这个对象,因为一对一找到的就是一条记录,注意写法:作者对象.字段名,就拿到了那个关联对象

        反向查询(按表名:author):不需要_set,因为一对一正向反向都是找到一条记录

    # 查询所有住址在北京的作者的姓名
     
    authorDet=AuthorDetail.objects.filter(addr="beijing")[0]
    authorDet.author.name

    多对多

    多对多查询(Author与Book)

      

      正向查询(按字段:authors):

    1
    2
    3
    4
    5
    6
    # 金瓶眉所有作者的名字以及手机号
     
    book_obj=Book.objects.filter(title="金瓶眉").first()
    authors=book_obj.authors.all()
    for author_obj in authors:
         print(author_obj.name,author_obj.authorDetail.telephone)

        反向查询(按表名:book_set):

    1
    2
    3
    4
    5
    6
    # 查询egon出过的所有书籍的名字
     
        author_obj=Author.objects.get(name="egon")
        book_list=author_obj.book_set.all()        #与egon作者相关的所有书籍
        for book_obj in book_list:
            print(book_obj.title)

        注意:

          你可以通过在 ForeignKey() 和ManyToManyField的定义中设置 related_name 的值来覆写 FOO_set 的名称。例如,如果 Article model 中做一下更改:

    1
    publish = ForeignKey(Book, related_name='bookList')

        那么接下来就会如我们看到这般:

    1
    2
    3
    4
    # 查询 人民出版社出版过的所有书籍
     
    publish=Publish.objects.get(name="人民出版社")
    book_list=publish.bookList.all()  # 与人民出版社关联的所有书籍对象集合

     在这里我们补充一点,因为你很快就要接触到了,那就是form表单里面的button按钮和form表单外面的button按钮的区别,form表单里面的button按钮其实和input type='submit'的标签是有同样的效果的,都能够提交form表单的数据,但是如果放在form表单外面的button按钮,那就只是个普通的按钮了。<button>提交</button>,还有一点,input type='submit'按钮放到form表单外面那就成了一个普通的按钮。

  • 相关阅读:
    Node.js+express 4.x 入门笔记
    排序系列 之 堆排序算法 —— Java实现
    排序系列 之 归并排序算法 —— Java实现
    javascript必须知道的知识要点(二)
    XGBoost安装
    ubuntu16.04查看哪些软件可更新
    禁止ubuntu更新内核
    ubuntu安装nvidia显卡驱动问题
    禁用ubuntu16.04的guest账户
    远程登录jupyter notebook
  • 原文地址:https://www.cnblogs.com/anthony-wang0228/p/10931119.html
Copyright © 2011-2022 走看看