博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django框架之图书管理系统(二)
阅读量:5437 次
发布时间:2019-06-15

本文共 4599 字,大约阅读时间需要 15 分钟。

该篇文章介绍多对多的关系介绍

一、数据库设计

一个作者对应多个书籍

一个书籍对应多个作者

总结也就是多对多之间的关系

 

通过模型类创建多对多之间的关系表的时候,Django框架通过ORM创建三个表,分别是作者表,书籍表,记录作者id对应书籍id的表

如下:

书籍表Books

作者表Author

 

作者书籍表author_book

 

二、代码部分

 models.py代码部分:

class Books(models.Model):    """    图书模型类    """    id=models.AutoField(primary_key=True) # 表的id,AutoField是自动增长,相当于设置auto_increment    bookname=models.CharField(max_length=24) # 表的name,CharField是数据库中的varchar,max_length必须设置    publisher=models.ForeignKey(to="Publisher") # 表的外键,这是一对多关键的所在,to="Publisher"表示关联Publisher模型类的主键class Author(models.Model):    id=models.AutoField(primary_key=True)    author=models.CharField(max_length=24,unique=True,null=False)    book=models.ManyToManyField(to="Books") # 多对多关系ManyToManyField

查:

urls.py

 

url(r'^author_books/$',show_author),

 

views.py

def show_author(request):    all_authors=Author.objects.all() # 查询所有的作者    # 通过后端获取id=1的作者名下的所有书籍    # Author.objects.get(id=1).book.all()    return render(request,"allauthor.html",{
"authors_list":all_authors})

 

allauthor.html

    
Title
添加作者
{% for authors in authors_list %}
{% endfor %}
ID 作者 书籍 操作1 操作2
{
{ authors.id }}
{
{ authors.author }}
{% for b in authors.book.all %} {% if forloop.last %} {
{ b.bookname }} {% else %} {
{ b.bookname }}, {% endif %} {% endfor %}
删除 编辑

 总结:

多对多关系之间的设计,给表添加一个models.ManyToManyField(to="关联的表")

例如:表A和表B是多对多关系

表A:id,name,a_b=models.ManyToManyField(to="B")

表B:id,name,b_a=models.ManyToManyField(to="A")

例:获取表A中id=1数据下的所有数据(B中保存的)

A.objects.get(id=1).a_b.all()

====================================================================

增:

views.py

def add_author(request):    if request.method=="GET":        all_books=Books.objects.all()        return render(request,"addauthors.html",{
"books_list":all_books}) if request.method=="POST": get_author=request.POST.get("addauthor") get_books=request.POST.getlist("addbooks") create_author=Author.objects.create(author=get_author) create_author.book.set(get_books) return redirect("/app04/author_books/")

 

addauthors.html

    
Title

 

总结:

1.其中获取复选框获取多个id值:request.GET.getlist("参数名")或request.POST.getlist("参数名")

2.添加数据(全部借助上面的A,B表,其中假设A表是作者表,B表是书籍表)

添加作者名字为张三,著作有:书名1,书名2

add_author=A.objects.create(name="张三")

add_author.a_b.set(获取的多个书籍id)

 

=======================================================================

删:

views.py

def delete_author(request):    get_id=request.GET.get("id")    if get_id:        Author.objects.get(id=get_id).delete()        return redirect("/app04/author_books/")

 

总结:

删除作者id=1(肯定也要删除作者下的书籍)

A.objects.get(id=1).delete()

 

========================================================================

改:

views.py

def editor_author(request):    if request.method=="GET":        allbooks=Books.objects.all()        get_id=request.GET.get("id")        if get_id:            author=Author.objects.get(id=get_id)            return render(request,"editorauthor.html",{
"books_list":allbooks,"author":author}) if request.method=="POST": get_id=request.POST.get("authorid") get_author=request.POST.get("editorauthor") get_booksid=request.POST.getlist("updatebooks") update_author=Author.objects.get(id=get_id) update_author.author=get_author update_author.book.set(get_booksid) update_author.save() return redirect("/app04/author_books/")

 

editorauthor.html

    
编辑作者

 

总结:

update_author=Author.objects.get(id=get_id)update_author.author=get_authorupdate_author.book.set(get_booksid)update_author.save()

 

转载于:https://www.cnblogs.com/fjiqiang/p/10881353.html

你可能感兴趣的文章
WCF宿主asp.netMVC 并且发布restfull接口数据
查看>>
bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖
查看>>
四则运算随机生成器
查看>>
deeplenrnig学习笔记——什么是特征
查看>>
Java入门系列-23-NIO(使用缓冲区和通道对文件操作)
查看>>
来自java文档 HashMap类
查看>>
Java中的内部类(一)静态内部类
查看>>
failed to load the jni shared library jvm
查看>>
Javascript编码风格
查看>>
django
查看>>
ASP.NET MVC 3 新特性
查看>>
vue报错信息
查看>>
布林带
查看>>
数据平滑
查看>>
奇异值分解
查看>>
快速傅里叶变换模块(fft)
查看>>
随机数模块(random)
查看>>
杂项功能(排序/插值/图像/金融相关)
查看>>
pandas核心
查看>>
线性回归
查看>>