Python - Django - 编辑作者
在作者列表页面的操作栏中加上编辑按钮
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>作者列表</title>
- </head>
- <body>
- <h1>作者列表</h1>
- <table border="1">
- <thead>
- <tr>
- <th>#</th>
- <th>id</th>
- <th>名字</th>
- <th>书籍</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody>
- {% for author in author_list %}
- <tr>
- <td>{{ forloop.counter }}</td>
- <td>{{ author.id }}</td>
- <td>{{ author.name }}</td>
- <td>
- {% for book in author.book.all %}
- {% if forloop.last %}
- {{ book.title }}
- {% else %}
- {{ book.title }} |
- {% endif %}
- {% endfor %}
- </td>
- <td>
- <a href="/del_author/?id={{ author.id }}">删除</a>
- <a href="/edit_author/?id={{ author.id }}">编辑</a>
- </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <a href="/add_author/">添加书籍</a>
- </body>
- </html>
运行结果:
添加 edit_author.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>编辑作者</title>
- </head>
- <body>
- <h1>编辑作者</h1>
- <form action="/edit_author/" method="post">
- <input type="text" name="author_id" value="{{ author.id }}" style="display: none">
- <p>
- 作者姓名:<input type="text" name="author_name" value="{{ author.name }}">
- </p>
- <p>
- 书籍:
- <select multiple name="books">
- {% for book in book_list %}
- {% if book in author.book.all %}
- <option selected value="{{ book.id }}">{{ book.title }}</option>
- {% else %}
- <option value="{{ book.id }}">{{ book.title }}</option>
- {% endif %}
- {% endfor %}
- </select>
- </p>
- <p>
- <input type="submit" value="提交">
- </p>
- </form>
- </body>
- </html>
解析:
在 urls.py 中添加 edit_author 的对应关系
- from django.conf.urls import url
- from django.contrib import admin
- from app01 import views
- urlpatterns = [
- # 出版社
- url(r'^publisher_list/', views.publisher_list),
- url(r'^add_publisher/', views.add_publisher),
- url(r'^del_publisher/', views.del_publisher),
- url(r'^edit_publisher/', views.edit_publisher),
- # 书籍
- url(r'^book_list/', views.book_list),
- url(r'^add_book/', views.add_book),
- url(r'^del_book/', views.del_book),
- url(r'^edit_book/', views.edit_book),
- # 作者
- url(r'^author_list/', views.author_list),
- url(r'^add_author/', views.add_author),
- url(r'^del_author/', views.del_author),
- url(r'^edit_author/', views.edit_author),
- ]
在 views.py 中添加 edit_author 函数
- from django.shortcuts import render, redirect, HttpResponse
- from app01 import models
- # 展示出版社列表
- def publisher_list(request):
- pass
- # 添加新的出版社
- def add_publisher(request):
- pass
- # 删除出版社
- def del_publisher(request):
- pass
- # 编辑出版社
- def edit_publisher(request):
- pass
- # 展示书籍列表
- def book_list(request):
- pass
- # 添加书籍
- def add_book(request):
- pass
- # 删除书籍
- def del_book(request):
- pass
- # 编辑书籍
- def edit_book(request):
- pass
- # 作者列表
- def author_list(request):
- # 查询所有作者
- all_author = models.Author.objects.all()
- return render(request, "author_list.html", {"author_list": all_author})
- # 添加作者
- def add_author(request):
- if request.method == "POST":
- # 取得提交的数据
- new_author_name = request.POST.get("author_name")
- # 如果提交的数据是多个值的话用 getlist
- books = request.POST.getlist("books")
- # 创建作者
- new_author_obj = models.Author.objects.create(name=new_author_name)
- # 把新作者和书籍建立对应关系,自动提交
- new_author_obj.book.set(books)
- # 跳转到作者列表页面,查看是否添加成功
- return redirect("/author_list/")
- # 查询所有的书籍
- all_books = models.Book.objects.all()
- return render(request, "add_author.html", {"book_list": all_books})
- # 删除作者
- def del_author(request):
- # 从 url 里提取要删除的作者 id
- del_id = request.GET.get("id")
- # 根据 id 删除 author 表和其相关联表的数据
- models.Author.objects.get(id=del_id).delete()
- # 返回作者列表
- return redirect("author_list.html")
- # 编辑作者
- def edit_author(request):
- # 从 post 提交过来的书籍
- if request.method == "POST":
- # 获取提交过来的作者 id 和姓名
- edit_author_id = request.POST.get("author_id")
- new_author_name = request.POST.get("author_name")
- # 获取提交过来和作者相关联的书籍
- new_book = request.POST.getlist("books")
- # 根据 id 去数据库中查询当前编辑的作者对象
- edit_author_obj = models.Author.objects.get(id=edit_author_id)
- # 更新数据库中作者的名字
- edit_author_obj.name = new_author_name
- # 更新数据库中与作者关联的书籍的对应关系
- edit_author_obj.book.set(new_book)
- # 将修改保存到数据库中
- edit_author_obj.save()
- # 返回作者列表页面,查看编辑是否成功
- return redirect("/author_list/")
- # 从 url 里获取要编辑作者的 id
- edit_id = request.GET.get("id")
- # 获取要编辑的作者对象
- edit_author_obj = models.Author.objects.get(id=edit_id)
- # 获取对象书籍对象
- all_book_list = models.Book.objects.all()
- return render(request, "edit_author.html", {"book_list": all_book_list, "author": edit_author_obj})
运行效果:
编辑 John
《Java》和《C》默认是被选择的,将 《Python》也选上
提交后
来数据库中看一下
作者 id 为 1 的关联书籍多了一个 2
Python - Django - 编辑作者的更多相关文章
- Python - Django - 删除作者
修改 author_list.html,添加删除按钮 <!DOCTYPE html> <html lang="en"> <head> <m ...
- Python - Django - 添加作者
在 book_list.html 的页面下方加上 “添加作者” 的链接 <!DOCTYPE html> <html lang="en"> <head& ...
- Python - Django - 显示作者列表
在 views.py 中添加展示作者列表的函数 from django.shortcuts import render, redirect, HttpResponse from app01 impor ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- Python+Django+Eclipse 在Windows下快速开发自己的网站
一.配置开发环境 我的开发环境是:Python3.3.2 + Django1.5.2 + Eclipse 1.安装Python 下载地址:http://www.python.org/getit/ 安装 ...
- python Django 学习笔记(一)—— Django安装
注:本人python版本2.7.5 ,win7系统 安装Django https://www.djangoproject.com/download/ 官方下载Django-1.5.5.tar.gz 1 ...
- 教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Sublime Text 是一款非常强大的文本编辑器, 下面我们介绍如何将 Sublime Text 3 打造成一款 Python/Django 开发利器: 1. 安装 Sublime Text 3 ...
- 将 Sublime 3 打造成 Python/Django IDE
Sublime Text 是一款非常强大的文本编辑器, 下面我们介绍如何将 Sublime Text 3 打造成一款 Python/Django 开发利器: 1. 安装 Sublime Text 3 ...
- Python+Django+SAE系列教程17-----authauth (认证与授权)系统1
通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...
随机推荐
- P1880 [NOI1995]石子合并[环形DP]
题目来源:洛谷 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将 ...
- JS多线程之Web Worker
什么是Web Worker web worker 是运行在后台的 JavaScript,不会影响页面的性能. 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成. web wor ...
- Mysql DELETE 不能使用别名? 是我不会用!
今天碰到一个sql问题,就是在delete中加了别名,导致报错了:"[Err] 1064 - You have an error in your SQL syntax; ..." ...
- C++——构造和析构函数
现在学习进入第三阶段,对c++要有更深入的学习,关于构造函数和析构函数这一块需要总结一下,来深刻理解这两个函数的意义. 什么是构造函数和析构函数呢呢?听着就很高大上,但是要从心里藐视它.就像自然万物有 ...
- 为RIDE创建桌面快捷方式
问题场景:默认情况下,RIDE的图标不是自动创建的,需要手动添加. 解决方法: 在桌面上新建"快捷方式" 目标对象的位置:C:\Python27\python2.exe - ...
- web-----chrome DevTools工具的常用使用记录
注:1.Chrome浏览器,2.在浏览器页面 右键--->检查,即可看到此页面 跟开发沟通过.他们查看一个页面的性能一般都会使用”检查“来观测.查找对应的数据记录. 设置网络的网速和通过设置某 ...
- ADB命令使用详解
ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备. 1.连接android设置 adb connect 设备名 例如: adb connect 12 ...
- AcWing P373 車的放置
Analysis 这道题是二分图匹配,设可以放車的的地方的坐标为(i,j),则连一条i到j的有向边(注意是有向边),然后再跑匈牙利算法就好了.时间复杂度是O(nm(n+m)),在1≤n,m≤200的情 ...
- hdu 3 * problem
hdu 6182 给出 $n$ 求 $\sum_{i = 1} ^ {\infty} (i * i <= n)$ 暴力枚举 hdu 6186 给出 $n$ 个数 $1e6$ 次询问,每次询问这 ...
- 【知识点】Java常用类库
1.字符串 修改字符串内容用StringBuffer,没有“+”,需要用append(),否则用String 2.JVM 相关 Runtime,单例模式,通过getRuntime()获取实例,可以调用 ...