一对多 多对多 查询

 目录:

  • 一对多
  • 多对多

 

一对多查询

多对一查询(正向查询):

方法1:

方法2:

>>> UserInfo.objects.all().values("username", "depart__title")
<QuerySet [{'username': 'alex', 'depart__title': 'IT'}, {'username': 'rick', 'depart__title': 'HR'}, {'username': 'vincen', 'depart__title':
 'CE'}]>
>>>

 

一对多查询(反向查询):

>>> d = Depart.objects.get(id=1)
>>> d.userinfo_set.all()
<QuerySet [<UserInfo: UserInfo object>]>
>>> d.userinfo_set.all()[0]
<UserInfo: UserInfo object>
>>> d.userinfo_set.all()[0].username
'alex'
>>>

注意: 这里使用了 userinfo_set.all()的方式来进行一对多访问。

_set获取的是一个QuerySet类型,也可进行filter,slice操作。

 

多对多查询

和访问外键相似,因为在Book类中定义和Author的多对多的关系,所以直接操作的是QuerySet的值,对于书和作者的多对多的关系,可以进行filter等操作,操作如下:

而在Author类中没有定义和Book的关系,因此需要使用_set进行操作(这种查询方式也称为反向查询):

 

posted @ 2017-05-17 10:13  Vincen_shen  阅读(124)  评论(0)    收藏  举报