基于双下划线的跨表查询
正向查询按字段,反向查询按表名小写
查询金瓶梅这本书的出版社的名字
---------------正向查询--------------
#基于下划线的跨表查询
ret = Book.objects.filter(title='金瓶梅').values("publish__name")
print(ret)
-------------------反向查询------------
ret = Publish.objects.filter(book__title='金瓶梅').values("name")
print(ret)
个人觉得 在基于下划线的反向查询中,反向查询时更加容易理解。
查询金瓶梅这本书所有的作者名字
#通过book表join与其关联的author表
##方式一
ret = Book.objects.filter(title='追风筝的人').values("authors__name")
print(ret)
#方式2
ret = Author.objects.filter(book__title='追风筝的人').values('name')
print(ret)
查询alex 的手机号
--------------一对一查询-----------------
ret= Author.objects.filter(name='alex').values("authorDetail__telephone")
print(ret)
阶段总结
表与表、字段与字段之间,如果存在关联关系的话 ,可直接用双下划线语法进行查询。
连续跨表查询
手机号以911开头的作者出版过的所有书籍名称以及出版社名称
ret = Book.objects.filter(authors__authorDetail__telephone__regex='911').values_list('title',"publish__name")
print(ret)
---需要补充 【related_name】的概念及例子