Django-42-ORM多对多查询(ManyToManyField自动创建)

2023-11-16

前提(初始表数据)

手动创建与自动创建的区别主要在于自动创建的表没有第三张可操作的表,其他没区别,此篇仅以自动创建为例说明

book表

author表

book_authors表 (关系表)

 

django_study.app01.views.py:新建一个more_to_more_select_db视图函数

from django.shortcuts import render  # 导入显示页面的模块
from django.http import HttpResponse  # 导入显示字符串的模块
from .models import *  # 导入操作的模型类
import datetime

# Create your views here.
def more_to_more_select_db(request):
    return HttpResponse("查询成功")

django_study.django_study.urls:绑定url与视图函数

url(r'^more_to_more_select_db/$', more_to_more_select_db)

 

查询操作:方式一(正向查询)

def more_to_more_select_db(request):
    # author_list存放满足条件的作者
    # 查询出“接口测试”这本书的作者
    author_list = []
    book_obj = Book.objects.get(name="接口测试")
    author_obj = book_obj.authors.all().values("name")
    for ath in author_obj:
        author_list.append(ath)
    return HttpResponse("查询结果:%s"%author_list)

运行状态访问查看

 

查询操作:方式二(反向查询)

def more_to_more_select_db(request):
    # book_list存放满足条件的书籍
    # 查询出作者为“wang01”的所有书籍
    book_list = []
    author_obj = Author.objects.get(name="wang01")
    book_obj = author_obj.book_set.all().values("name")
    for ath in book_obj:
        book_list.append(ath)
    return HttpResponse("查询结果:%s"%book_list)

运行状态访问查看

 

查询操作:方式三(双下划线子表查询)

def more_to_more_select_db(request):
    # book_list存放满足条件的书籍
    # 查询出作者为“wang02”的所有书籍(book子表去查)
    book_list = []
    book_obj = Book.objects.filter(authors__name="wang02").values("name")
    for i in book_obj:
        book_list.append(i)
    return HttpResponse("查询结果:%s"%book_list)

运行状态访问查看

查询操作:方式四(双下划线母表查询)

def more_to_more_select_db(request):
    # book_list存放满足条件的书籍
    # 查询出作者为“wang02”的所有书籍(author母表去查)
    book_list = []
    book_obj = Author.objects.filter(name="wang02").values("book__name")
    for i in book_obj:
        book_list.append(i)
    return HttpResponse("查询结果:%s"%book_list)

运行状态访问查看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django-42-ORM多对多查询(ManyToManyField自动创建) 的相关文章

随机推荐