前文,我已经介绍过了外键。本文将介绍,在带有外键的情形下,如何实现增删改查的。图书管理系统现在已经可以管理出版社了,这一步就是管理书籍。鉴于前面的一系列文章已经介绍过了出版社是如何增删改查的,本次就直接上代码,展示效果。
views.py文件代码如下:
from django.shortcuts import render, redirect, HttpResponse
from app01 import models
# Create your views here.
def publisher_list(request):
obj = models.Publisher.objects.all() # 获取所有对象
return render(request, 'publisher_list.html', {'publisher_list': obj}) # {'publisher_list': obj}是模板,可以传递给前端页面。
def publisher_add(request):
if request.method == "POST": # 如果是POST请求
pub_name = request.POST.get('pub_name') # 获取出版社的名称
if not pub_name:
return render(request, 'publisher_add.html', {'error': "出版社名字不能为空"})
if models.Publisher.objects.filter(name=pub_name):
return render(request, 'publisher_add.html', {'error': "出版社已经存在"})
models.Publisher.objects.create(name=pub_name) # 增加出版社,使用create方法
return redirect('/publisher_list/') # 增加完成以后,跳转到获取所有出版社页面
return render(request, 'publisher_add.html') # 默认返回增加页面。
def publisher_del(request):
pk = request.GET.get('id') # 获取URL中id字段的值
models.Publisher.objects.filter(id=pk).delete() # 删除数据库中的数据
return redirect('/publisher_list/') # 重定向页面。
def publisher_edit(request):
id = request.GET.get('id')
obj1 = models.Publisher.objects.get(id=id)
if request.method == "GET":
return render(request, 'publisher_edit.html', {'pub_obj': obj1})
else:
name = request.POST.get('pub_name')
obj2 = models.Publisher.objects.filter(name=name)
if obj2:
return render(request, 'publisher_edit.html', {'msg': "该出版社已存在"})
else:
obj1.name = name # 在内存中修改
obj1.save() # 将修改保存到数据库
return redirect('/publisher_list') # 重定向到list页面
def book_list(request):
objs = models.Book.objects.all()
# for obj in objs:
# print(obj.name)
# print(obj.publisher.name) # 关联出版社的名字
# print(obj.publisher) # 书籍所关联的出版社对象
# print(obj.publisher_id) # 通过_id可以直接拿到关联的出版社的id
# print("\n")
return render(request, 'book_list.html', {'objs': objs})
def book_add(request):
if request.method == "GET":
pub_obj = models.Publisher.objects.all()
return render(request, 'book_add.html', {'pub_obj': pub_obj})
elif request.method == "POST":
book_name = request.POST.get('book_name')
pub_id = request.POST.get('pub_id')
if not book_name: # 书名为空
pub_obj = models.Publisher.objects.all()
return render(request, 'book_add.html', {'pub_obj': pub_obj, 'err_msg': '书名不能为空'})
if models.Book.objects.filter(name=book_name): # 书籍已存在
pub_obj = models.Publisher.objects.all()
return render(request, 'book_add.html', {'pub_obj': pub_obj, 'err_msg': '书籍已存在'})
# models.Book.objects.create(name=book_name, publisher=models.Publisher.objects.get(id=pub_id)) #两种方式
models.Book.objects.create(name=book_name, publisher_id=pub_id)
return redirect('/book_list/')
else:
return HttpResponse("请求方式错误")
def book_del(request):
if request.method == "GET":
book_id = request.GET.get('id')
obj = models.Book.objects.filter(id=book_id).delete()
return redirect('/book_list/')
else:
return HttpResponse("请求方式错误")
def book_edit(request):
book_id = request.GET.get('id')
obj = models.Book.objects.get(id=book_id)
pub_obj = models.Publisher.objects.all()
if request.method == "GET":
return render(request, 'book_edit.html', {'obj': obj, 'pub_obj': pub_obj})
elif request.method == "POST":
book_name = request.POST.get('book_name')
pub_id = request.POST.get('pub_id')
# 方式一
# obj.name = book_name
# obj.publisher_id = pub_id
# obj.save() # 保存到数据库中
# 方式二
models.Book.objects.filter(id=book_id).update(name=book_name,
publisher_id=pub_id) # 实际上filter返回的是一个列表,理论上是此时的update是一个批量操作。
# 这个update是
return redirect('/book_list/')
else:
return HttpResponse("请求方式错误")
这张图片是删除python入门到放弃以后
HTML页面和urls.py等文件的改动就不具体展示了,下面是CSDN的资源下载链接。(CSDN变了啊,它居然能够粉丝免费下载了,不要积分了,不挣C币了。所以各位想下载的可以关注我,然后就可以下载了,下载完了之后觉得不想关注的取关即可)