图书管理系统之外键的增删改查
---恢复内容开始---
1,图书管理系统的表结构设计
1.1>id,titlev,出版社_id
1.2>ORM外键:press = models.ForignKey(to="Press", on_delete=models.CASCDE)
2,书籍的增删改查
2.1>查询book_obj.press ->ORM层面封装,返回的是和这本书关联的出版社对象
book_obj.press_id -->数据库中真正存在的字段,保存的是和关联的出版社id值
2.2>增加>用select标签把已经存在的出版社页面上展示出来,让用户去选择
使用的是:模板语言的for循环
2.3>删除:补充3秒之后跳转到指定页面的操作1>location.href(),2>setTimeout(),3>setinterval()
2.4>编辑,用select标签展示默认的出版社
Django模板语言中的if判断
{% if 条件 %}
{% else %}
{% endif %}
3,书籍的代码:
def book_list(request):
# 1,用户进来以后给用户展示书籍的清单
# 从数据库中把数据读取出来
book_data = Book.objects.all()
# print(book_data)
# 是一个所有书对象的列表
# 可以通过索引找到每一个对象,对象.外键就等于另一个表的对象(组合)
return render(request, "book_list.html", {"book_data":book_data})
def add_book(request):
# 2 第二次进来是POST请求,提交用户填好的数据
if request.method =="POST":
new_book_name = request.POST.get("title")
new_book_press= request.POST.get("press_id")
print(new_book_name)
print(new_book_press)
# 2,把获取到的数据更新到数据库中
Book.objects.create(name=new_book_name, press_id=new_book_press)
# 3,在给用户展示新增以后的页面
return redirect("/book_list/")
# 1第一次进来给用于展示添加的页面
# 2从数据库中获得所有出版社的数据
press_obj = Press.objects.all()
print(press_obj)
return render(request, "add_book.html", {"press_obj":press_obj})
def delete_book(request):
# 1获取用户点击删除的id值
delete_book_id = request.GET.get("id")
print(delete_book_id)
# 2找到这个id值对用 的对象并删除
Book.objects.filter(id=delete_book_id).delete()
# 3跳转到书籍列表页面
return redirect("/book_list/")
def edit_book(request):
# 1先获取用户要编辑的id值
edit_id = request.GET.get("id")
# 2获取该id值的对象
edit_obj = Book.objects.filter(id=edit_id)
# 第二次进来是POST请求,获取修改完以后的值
if request.method == "POST":
new_name = request.POST.get("book_title")
new_press = request.POST.get("press_id")
# VBA获取到的数据更新到数据库中
edit_obj.name = new_name
edit_obj.press_id = new_press
# 更新完以后save()一下
edit_obj.save()
# 用户第一次进来是获取要编辑的页面
# 还要把输的原名称和原出版社的列表展示给用户
# print(edit_obj.press.name)
press_obj = Press.objects.all()
return render(
request,
"edit_book.html",
{"book_name":edit_obj}, {"press_data": press_obj})