当前位置:
首页 > Python基础教程 >
-
Django框架(APP和ORM的使用)(2)
>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9"><button type="submit" class="btn btn-default">提交</button> </div>
</div>
</form>
templates/edit_book.html:
#action=""此处使用默认URL,即继承之前的/edit_book/?id={{ book.id }} #或者#action="/edit_publisher/?id={{ publisher.id }}"那么就从URL中用request.GET.get()取id参数 <form class="form-horizontal" action="" method="post"> #隐藏要编辑的书,发送id到后端,为了在后端找到要修改的图书,方便修改 #<input type="text" value="{{ book.id }}" name="book_id" class="hide"> #预先在输入框和下拉框显示要修改的图书名和出版社名 <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">书籍名称</label> <div class="col-sm-9"> <input type="text" class="form-control" id="inputEmail3" name="book_title" value="{{ book.title }}" placeholder="书籍名称"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">出版社名称</label> <div class="col-sm-9"> <select class="form-control" name="publisher_id"> # 如果当前循环到的出版社和书关联的出版社相等,则添加selected,表示预先选中的 {% for publisher in publisher_list %} {% if publisher == book.publisher %} <option value="{{ publisher.id }}" selected>{{ publisher.name }}</option> {% else %} <option value="{{ publisher.id }}">{{ publisher.name }}</option> {% endif %} {% endfor %} </select> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form>
12.323 有关作者的函数逻辑
# 作者列表函数 def author_list(request): authors = models.Author.objects.all() # 从数据库中查询所有的作者数据,在页面上展示出来 # author_obj = models.Author.objects.get(id=1) # print(author_obj.books.all()) 表示id=1的作者写的所有书的对象 return render(request, "author_list.html", {"author_list": authors}) # 添加作者函数 def add_author(request): if request.method == "POST": new_author_name = request.POST.get("author_name") # 拿到新的作者姓名 models.Author.objects.create(name=new_author_name)# 去数据库中创建一个新的作者记录 return redirect("/author_list/") # 创建好作者之后,让用户跳转到作者列表页面 # 返回一个页面,让用户填写新的作者信息 return render(request, "add_author.html") # 删除作者函数 def delete_author(request): delete_author_id = request.GET.get("id") # 从URL里面取到要删除的作者的ID models.Author.objects.get(id=delete_author_id).delete()# 去数据库中找到该作者并删除 return redirect("/author_list/") # 删除成功后 跳转回作者列表页面 # 编辑作者函数 def edit_author(request): if request.method == "POST": # 如果发送的是POST请求,应该拿到用户提交的数据 edit_author_id = request.POST.get("author_id") # 编辑的作者id # 取新名字和新的书籍id new_author_name = request.POST.get("author_name") new_book_ids = request.POST.getlist("book_ids") # 如果提交过来的数据是多个值(多选的select/多选的checkbox)则使用getlist取列表 # print(request.POST) # print(edit_author_id, new_author_name, new_book_ids) # 去编辑作者以及对应的书籍 edit_author_obj = models.Author.objects.get(id=edit_author_id)# 拿到编辑的作者对象 edit_author_obj.name = new_author_name # 修改作者姓名 edit_author_obj.save() # 修改作者写的书籍 edit_author_obj.books.set(new_book_ids) #通过新书id更换作者对应的书籍,并提交数据库 return redirect("/author_list/") # 修改完成之后,跳转到作者列表页面 # 返回一个页面,让用户编辑 edit_author_id = request.GET.get("id") # 从URL里面取到要编辑作者的id参数 edit_author_obj = models.Author.objects.get(id=edit_author_id)# 取到要编辑的作者对象 book_list = models.Book.objects.all() # 获取所有的书籍对象信息 return render(request,"edit_author.html",{"author": edit_author_obj,
templates/author_list.html:
<div class="col-md-3 col-sm-6 pull-right add-btn"> <button data-target="#myModal" data-toggle="modal" class="btn btn-success pull-right">新增 </button> <a href="/add_author/" class="btn btn-info pull-right">新页面添加 </a> </div> <table class="table table-striped table-bordered"> <thead> <tr> <th>序号</th> <th>作者姓名</th> <th>著作</th> <th>操作</th> </tr> </thead> <tbody> {% for author in author_list %}#{"author_list": authors} <tr> <td>{{ forloop.counter }}</td> <td>{{ author.name }}</td> <td> #在这一列展示这个作者关联的所有的书籍 {% for book in author.books.all %}#书籍对象的列表 {% if forloop.last %} 《{{ book.title }}》 {% else %} 《{{ book.title }}》, {% endif %} {% empty %} 暂无著作 {% endfor %} </td> <td class="text-center"> <a class="btn btn-info btn-sm" href="/edit_author/?id={{ author.id }}"> <i class="fa fa-pencil fa-fw" aria-hidden="true"></i>编辑 </a> <a class="btn btn-danger btn-sm" href="/delete_author/?id={{ author.id }}"> <i class="fa fa-trash-o fa-fw" aria-hidden="true"></i>删除 </a> </td> </tr> {% endfor %} </tbody> </table>
templates/add_author.html:
<form class="form-horizontal" action="/add_author/" method="post"> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">作者姓名</label> <div class="col-sm-9"> <input type="text" class="form-control" id="inputEmail3" name="author_name" placeholder="作者姓名"> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form>
templates/edit_author.html:
<form class="form-horizontal" action="" method="post">#action=""默认转到当前URL <input type="text" value="{{ author.id }}" name="author_id" class="hide"> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">作者姓名</label> <div class="col-sm-9"> <input type="text" class="form-control" id="inputEmail3" name="author_name" value="{{ author.name }}" placeholder="作者姓名"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">著作</label> <div class="col-sm-9"> <select class="form-control" name="book_ids" multiple> {% for book in book_list %} #book_list 所有的书籍对象 #author:要编辑的作者,author.books.all:要编辑的作者的所有书籍对象 {% if book in author.books.all %} # 如果当前这本书在作者写的书里面 <option value="{{ book.id }}" selected>{{ book.title }}</option> {% else %} <option value="{{ book.id }}">{{ book.title }}</option> {% endif %} {% endfor %} </select> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form>