需求:创建一个简单的图书管理系统包含图书,作者,出版社
其中出版社与图书:一对多关系
作者与图书:多对多关系
前面常规的配置各种建立模型类
from django,db import models
# 出版社模型类
class Publisher(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
# 可以用其他形式传参,不过一定是__str__传递字符串
return ''.fromat(self.name)
# 图书模型类
class Book(models.Model):
title = models.CharField(max_length=32)
# 定义外键,必须有on_delete参数 CASCADE是联级删除,一起删除
publisher = models.ForeignKey(to='Publisher',on_delete=models.CASCADE)
def __str__(self):
return'',fromat(self.title)
# 作者图形类
class Author(models.Model):
name =models.CharField(max_length=32)
# 定义多对多连接
book =models.ManyTOManyField(to='Book')
def __str__(self):
return ''.fromat(self.name)
注:有外键的连接以及on_delete删除模式,多对多连接
视图函数代码
1.1出版社列表
def publisher_list(request):
# 查询出所有出版社
publisher_obj_list = models.Publisher.objects.all()
# 响应
return render(request, 'app01/publisher_list.html',{'publisher_obj_list':publisher_obj_list})
1.2添加出版社
def publisher_add(request):
# 获取表单
n = request.POST.get('name')
# 保存数据库
models.Publisher.objects.create(name=n)
# 重定向到显示界面list
return redirect('/app01/publisher_list/')
1.3删除出版社
def publisher_delete(request):
# 获取id
ids = request.GET.get('id')
# 查询数据库指定id并删除
models.Publisher.objects.get(id=ids).delete()
# 响应重定向的显示界面list
return redirect('/app01/publisher_list/')
1.4查询出版社
def publisher_edit(request):
if request.method =='GET'
# GET请求
# 1获取id
ids = request.GET.get('id')
# 2查询数据库
publisher_obj = models.Publisher.objects.get(id=ids)
# 3返回页面
return render(request, 'app01/publisher_edit.html',{'publisher_obj':publisher_obj})
else:
# POST请求
# 1获取表单提交的数据
ids = request.POST.get('id')
n = request.POST.get('name')
# 2查询数据库并修改
publisher_obj =models.Publisher.objects.get(id=ids)
publisher_obj.name = n
# 3保存修改数据
publisher_obj.save()
# 4重定向
return redirect('/app01/publisher_list/')
注:看注释了解各部分的步骤
后续的图书作者方法与上面大同小异
多对多的html页面略有不同
2.1图书列表
def book_list(request):
# 1查询出所有图书
book_obj_list = models.Book.objects.all()
# 2响应
return render(request, 'app01/book_list.html',locals())
2.2添加图书
def book_add(request):
# POST请求
if request.method == 'POST':
# 获取表单提交内容
n = request.POST.get('name')
pub_id = request.POST.get('publisher_id')
# 保存数据库
models.Book.objects.create(
title = n,
publisher_id = pub_id
)
# 重定向
return redirect('/app01/book_list/')
else:
# GET请求
# 获取出版社列表
publisher_obj_list = models.Publisher.objects.all()
return render(request,'app01/book_add.html',locals())
2.3图书删除
def book_delete(request):
# 1获取id
ids = request.GET.get('id')
# 2查询图书数据库并删除
models.Book.objects.get(id=ids).delete()
# 3重定向
return redirect('/app01/book_list/')
2.4查询图书
def book_edit(request):
# GET请求
if request.method == 'GET':
# 1获取id
ids = request.GET.get('id')
# 2查询书库
book_obj = models.Book.objects.get(id=ids)
publisher_obj_list = models.Publisher.objects.all()
# 3返回页面
return render(request,'app01/book_edit.html',locals())
else:
# POST请求
# 1获取表单提交内容
ids = request.POST.get('id')
n = request.POST.get('name')
# 2查询书库并修改
book_obj = models.Book.objects.get(id=ids)
book_obj.title = n
book_obj.publisher_id = publisher_id
# 3save保存
book_obj.save()
# 重定向
return redirect('/app01/book_list/')
3.1作者列表
def author_list(request):
# 查询数据库
author_obj_list = models.Author.objects.all()
'''
测试代码
print(author_obj_list[0].book.all())
'''
return render(request, 'app01/author_list.html',locals())
3.2添加作者
def author_add(request):
# POST请求
if request.method =='POST':
# 1获取数据
n = request.POST.get('name')
book_ids = request.POST.getlist('book_ids')# getlist方法
# 2保存到数据库
author_obj = models.Author.objects.create(name= n)
author_obj.book.set(book_ids)
# 3重定向
return redirect('/app01/author_list/')
else:
# GET请求
# 1查询数据库
book_obj_list = models.Book.objects.all()
# 2重定向
return render(request, 'app01/author_add.html', locals())
3.3删除作者
def author_delete(request):
# 获取id
id = request.GET.get('id')
# 删除数据
models.Author.objects.get(id= id).delete()
# 重定向
return redirect('/app01/author_list/')
3.4查询作者
def author_edit(request):
# GET请求
if request.method.GET.get('id')
# 1获取id
id = request.GET.get('id')
# 2查询数据库
author_obj = models.Author.objects.get(id= id)
return render(request,'app01/author_edit.html/,locals())
else:
# POST请求
# 1获取提交过来的数据
author_id = request.POST.get('id')
n = request.POST.get('name')
book_ids = request.POST.getlist('book_ids')
# 2查询数据库并修改
author_obj = models.Author.objects.get(id= author_id)
author_obj.name = n
author_obj.book.set(book_ids)
# 3保存
author_obj.save()
# 4重定向
return redirect('/app01/author_list/')
注:了解save(),set什么时候用
一对多,一般讲关系字段设在多的一方