day 61 django 跨表查询
查询
基于对象的跨表查询——类似于子查询
正向查询:关系字段写在那个表里面,通过这个表去查询另外一个表
反向查询:关系字段在另外一张表,通过这张表查询宁外一张表数据
###########################查询#########################
一对一
########正向查询####################
new_author = models.Author.objects.get(pk=3)
print(new_author.name)
print(new_author.authorDetail.id)
print(new_author.authorDetail.birthday)
print(new_author.authorDetail.addr)
print(new_author.sex.name)
#########反向查询#################
new_author_detail = models.AuthorDetail.objects.get(addr='四川成都')
print(new_author_detail.author) #models对象点表名获取表的str方法
print(new_author_detail.author.id)
print(new_author_detail.author.name)
print(new_author_detail.author.age)
一对多
########正向查询####################
new_book = models.Book.objects.get(name='狼的诱惑')
print(new_book.publishs.name) #上海出版社
#########反向查询#################
上海出版社 出版了那些书
new_pubilc_book = models.Public.objects.get(name='上海出版社')
print(new_pubilc_book.book_set.all()) #<QuerySet [<Book: 狼的诱惑>, <Book: 双色球>]>
print(new_pubilc_book.book_set.all().values())
<QuerySet [{'id': 2, 'name': '狼的诱惑', 'publishDate': datetime.date(2021, 3, 4), 'price': 1000.0, 'publishs_id': 2}, {'id': 3, 'name': '双色球', 'publishDate': datetime.date(2021, 3, 31), 'price': 1000000.0, 'publishs_id': 2}]>
print(new_pubilc_book.book_set.all().values_list('name','price'))
# < QuerySet[('狼的诱惑', 1000.0), ('双色球', 1000000.0)] >
for i in new_pubilc_book.book_set.all():
print(i)
多对多
########正向查询####################
查询 书籍名 办公室 是谁写的
new_author = models.Book.objects.get(name='办公室')
print(new_author.authors.all()) #<QuerySet [<Author: 小泽玛利亚>, <Author: 小泽玛利亚-2>]>
print(new_author.authors.values())
<QuerySet [{'id': 4, 'name': '小泽玛利亚', 'age': 28, 'sex_id': 2, 'authorDetail_id': 6}, {'id': 5, 'name': '小泽玛利亚-2', 'age': 28, 'sex_id': 2, 'authorDetail_id': 7}]>
print(new_author.authors.values_list('name','age'))
<QuerySet [('小泽玛利亚', 28), (