五、Django基于对象的跨表查询
六、基于对象的跨表查询
正向与反向查询
关键在于ForeignKey
字段写的位置。例如下面这段代码,
关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的数据叫做正向查询,反之叫做反向查询
- Publish查询Book的内容就是反向查询
- Book查询Publish的内容就是正向查询
1 | class Publish(models.Model): |
一对一
正向查询的例子为 已知用户名,查询用户的电话号码。反向查询例子反之。
正向查询
正向查询靠对象,取到数据对象后,通过点操作符对外键操作,就能拿到外键的对象,从而取到内容
1 | author_obj = models.Author.objects.filter(name='admin').first() |
反向查询
查到对象后,通过小写的表名来获取另一个表的属性
1 | author_detail_obj = models.AuthorDetail.objects.get(telephone='213') |
一对多
正向查询
与一对一较为类似
1 | book_obj = models.Book.objects.get(title='第二本书') |
反向查询
注意对象调用的是加_set
的方法,然后all()
即可取出全部内容
1 | publish_obj = models.Publish.objects.get(name="老男人出版社") |
多对多
正向查询
1 | book_obj = models.Book.objects.get(title='第一本书') |
反向查询
1 | auth_obj = models.Author.objects.get(name='admin') |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline