1,多对多的关机设计
作者 <---> 书籍
1.1>ORM穿件第三张表
1>自己创建第三张表
2>让ORM帮我们创建第三章表:models.ManytoManyFiled()
3>第三种,待补充(ORM进阶操作)
2,作者 的增删改查
2.1>if判断
{% if 条件 %}
{% else %}
{% endif %}
3,Django请求的流程图
4,作者表和书籍表的多对多结构设计
from django.shortcuts import render, redirect, HttpResponse
# Create your views here.
from app01.models import Press, Book, Author def author_list(request): # 用户第一次进来给用户展示追着的页面 # 1从数据库读取数据 author_data = Author.objects.all() # for author in author_data: # print(author.books.all()[0].name) # book_data = Book.objects.all() # press_data = Press.objects.all() return render(request, "author_list.html", {"author_data": author_data}) def add_author(request): # 2第二次进来,是POST请求,要提交数据 if request.method == "POST": # 2.1获取用户输入的作者姓名 new_author_name = request.POST.get("author_name") # 2.2获取用户输入的作品 new_book_names = request.POST.getlist("books") print(new_book_names) # 拿到的是书籍名称对应的id值 # 3把获取到的数据更新到数据库中 author_obj = Author.objects.create(name=new_author_name) print(author_obj) # 创建一个作者的对象 author_obj.books.add(*new_book_names) # 给作者的对象添加books的属性增加数据 return redirect("/author_list/") # 1当第一次进来返回给用户一个添加的页面 book_data = Book.objects.all() for book in book_data: print(book.name) return render(request, "add_author.html", {"book_list": book_data}) def delete_author(request): # 1,获取到用户是点击的你那个删除的按钮 delete_id = request.GET.get("id") # 2,获得要删除的作者对象 delete_obj = Author.objects.get(id=delete_id) print(delete_obj) # 3,取数据库中找到这个对象,并删除掉 delete_obj.delete() # 4,给用户返回删除以后的作者列表 return redirect("/author_list/") def edit_author(request): # 用户第一次进来是GET请求,需要但会一个编辑的页面 # 在返回页面前需要把这个标签原来的作者名和 书籍名称返回给用户 edit_id = request.GET.get("id") # 获得要编辑的对象 edit_obj = Author.objects.get(id=edit_id) print(edit_obj.name) # 2,第二次进来是POST请求 if request.method == "POST": # 2.1,获取用户输入的作者名字 edit_name = request.POST.get("author_name") # 2.2,获取用户选择的书籍名字 edit_book_ids = request.POST.getlist("books") # 3,把获取到的数据更新到数据库中 edit_obj.name = edit_name # 3.1 刷新一些数据库中 edit_obj.save() # 3.2,修改秀偶像和和数据集的关系表 edit_obj.books.set(edit_book_ids) # 4,返回给用户修改后的页面 return redirect("/author_list/") # 1,返回页面 # 2,获得书籍的对象 book_data = Book.objects.all() return render(request, "edit_author.html", {"book_data": book_data}, {"author_obj": edit_obj})