第三篇-Django建立数据库各表之间的联系(下)
中篇介绍的是添加,下篇主要介绍查询
通过一个Book表的书的信息查询Publish表中出版社的信息
def addbook(request): # Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2) # publish_obj=Publish.objects.filter(name="人民出版社")[0] # Book.objects.create(name="GO",price=23,pub_date="2018-10-2",publish=publish_obj) book_obj=Book.objects.get(name="python") print(book_obj.name) print(book_obj.pub_date) print(book_obj.publish.name) print(type(book_obj.publish)) return HttpResponse("添加成功")
可以看见Book.obj.publish是一个对象,后面可以直接.属性获取相应的值。
如果要看一个出版社出版了多少书
def addbook(request): # Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2) # publish_obj=Publish.objects.filter(name="人民出版社")[0] # Book.objects.create(name="GO",price=23,pub_date="2018-10-2",publish=publish_obj) # book_obj=Book.objects.get(name="python") # print(book_obj.name) # print(book_obj.pub_date) # print(book_obj.publish.name) # print(type(book_obj.publish)) pub_obj=Publish.objects.filter(name="人民出版社")[0] ret=Book.objects.filter(publish=pub_obj).values("name","price") print(ret) return HttpResponse("添加成功")
pub_obj是一个对象,获取到name是人民出版社的集合,取其中的第一个。此时表中只有一个人民出版社。
ret是找到publish对象为人民出版社的书的集合,取这些集合对象中的name和price的值。
由于此时Book表中每个出版社只有一本书,所以为了看到效果,在Book表中手动添加2本书书籍。
然后刷新http://127.0.0.1:8888/addbook/页面
会看见pycharm的Terminal窗口输出:
<QuerySet [{'name': 'GO', 'price': 23}, {'name': 'C++', 'price': 99}]>
可以看出,人民出版社出版了GO和C++两本书,是正确的。