Django(9)ORM多表实例(三)

简介: Django(9)ORM多表实例(三)

3、多对多


  • 正向:对象.属性(book.authors)可以跳转到关联的表
  • 下面寻找Python教程的所有作者以及手机号,即正向,由于作者表里并没有手机号,所以还需要通过对象.属性(i.au_detail)跳转到关联的表


# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book = models.Book.objects.filter(title="Python教程").first()
    res = book.authors.all()
    for i in res:
        print(i.name,i.au_detail.tel)
    return HttpResponse("ok")
  • 访问测试



f5c681d5b36a4cd486caacd356e8d9ea.png


  • 查看终端输出和数据库信息


1e30571a2f07401d974058c9a40a8bc1.png


fd88c60d45c545e2a8d3997876d340e7.pngb92e5cc830f84cdcbaa225f3c7c72602.png



17cb6f7cbb7b4fb2bc9bf1ba2e224c7e.png

a6fe59fa3f5e467197b42dec69ae4c90.png


  • 下面查询任我行写的所有书籍的名称,即反向
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    author = models.Author.objects.filter(name="任我行").first()
    res = author.book_set.all()
    for i in res:
        print(i.title)
    return HttpResponse("ok")
  • 访问测试



a1f5adb5b9724ace94bf201350b93ff6.png

  • 查看终端输出和数据库信息


425c12bec4fc493994b32f8c97a77edf.png


7f24c21353274c518ccbdfb096ffb6b8.png


cd3c28cee4944e919f3cb96a1ada281b.png


4cbf97e635dd4ef6a4513c2a53bf255f.png

五、基于双下划线的跨表查询


  • 正向:属性名称__跨表的属性名称
  • 反向:小写类名__跨表的属性名称


1、一对多


  • 查询华山出版社出版过的所有书籍名称和价格
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Book.objects.filter(publish__name="华山出版社").values_list("title","price")
    return HttpResponse(res)
  • 访问测试


bc903e1528b74b9aa42f790aa193cd5c.png


查看数据库信息


6964d68a28db4d168ca814b9fd5e87a7.png

2843d1482b0f4766b49e86f2acc87282.png


  • 下面是反向,通过小写类名__跨表的属性名称(book__title,book__price)跨表获取数据


# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Publish.objects.filter(name="华山出版社").values_list("book__title","book__price")
    return HttpResponse(res)


访问测试


bcc6c15f43c5422f9f00131abb39859d.png



2、多对多


  • 查询任我行出过的所有书籍的名称
  • 正向:通过属性名称__跨表的属性名称(authors__name)跨表获取数据:


# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Book.objects.filter(authors__name="任我行").values_list("title")
    return HttpResponse(res)


  • 访问测试


eaf204fe05384e42a31dc2ae7cc7ebf4.png

反向:通过小写类名__跨表的属性名称(book__title)跨表获取数据

# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Author.objects.filter(name="任我行").values_list("book__title")
    return HttpResponse(res)
  • 访问测试


6ea1aa41b28b49098d4dd871f043d0fc.png

3、一对一


  • 查询任我行的手机号
  • 正向:通过**属性名称__跨表的属性名称(au_detail__tel)跨表查询数据


# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Author.objects.filter(name="任我行").values_list("au_detail__tel")
    return HttpResponse(res)


  • 访问测试

00f74451ee99428f9e47917b8c4bced6.png

  • 反向:通过小写类名__跨表的属性名称(author__name)跨表获取数据
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.AuthorDetail.objects.filter(author__name="任我行").values_list("tel")
    return HttpResponse(res)

访问测试

f1ae22179e034c64a9db60d50efb1521.png

目录
相关文章
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
70 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
62 0
|
4月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
58 1
|
4月前
|
数据库 Python
Django ORM
【8月更文挑战第23天】
49 4
|
4月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
43 0
|
4月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
4月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作
|
5月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
79 1
|
6月前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
6月前
|
存储 安全 数据库
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践