图书管理系统值多对多关系的增删改查
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})