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

转载于:https://www.cnblogs.com/anthony-wang0228/p/10931119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值