"""
正反向的概念:
看外键字段在哪个表单
正向:
通过书籍查看出版社,就是正向
按字段查询
反向:
通过出版社查看书籍,就是反向
按表名查询[小写]
多表查询:
子查询:基于对象的跨表查询
连表查询:基于双下划线的跨表查询
"""
import os
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'idjango.settings')
import django
django.setup()
from idea import models
"""正向查询"""
# 1.查询书籍主键为1的出版社
booK_obj = models.Book.objects.filter(pk=1).first()
# 获取一个出版社对象,从而获取名字
print(booK_obj.publish.name)
# North
# 2.查询书籍主键为1的作者
# 当结果可能为多个值时,需要加.all()
print(booK_obj.authors.all())
# <QuerySet [<Author: Author object (1)>]>
# 3.查询作者lili的电话号码
author_obj = models.Author.objects.filter(name='李白').first()
print(author_obj.author_detail.phone)
# 1314
"""反向查询"""
# 1.查询出版社为东方出版社的书籍
publish_obj = models.Publish.objects.filter(name='North').first()
print(publish_obj.book_set.all())
# <QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]>
# 2.查询作者名为lili的书籍
author_obj = models.Author.objects.filter(name='李白').first()
print(author_obj.book_set.all())
# <QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]>
# 3.查询手机号为12121212的作者姓名
# 结果为1个时,不需要加_set.all()
author_detail_obj = models.AuthorDetail.objects.filter(phone=1516).first()
print(author_detail_obj.author.name)
# 杜甫