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表单外面那就成了一个普通的按钮。

posted @ 2019-05-27 15:50  AnthonyWang  阅读(169)  评论(0编辑  收藏  举报