目录

urls

from django.contrib import admin
from django.urls import path,re_path
from book import viewsurlpatterns = [path('admin/', admin.site.urls),re_path('books/add/$',views.add_book),re_path('books/$',views.books),re_path('books/(\d+)/change/$',views.change_book),re_path('books/(\d+)/delete/$', views.delete_book)
]

models

from django.db import models# Create your models here.
class Author(models.Model):nid = models.AutoField(primary_key=True)name=models.CharField(max_length=32)age=models.IntegerField() class Publish(models.Model):nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)city=models.CharField(max_length=32)email=models.EmailField()class Book(models.Model):nid=models.AutoField(primary_key=True)title=models.CharField(max_length=32)publishDate=models.DateField()price=models.DecimalField(max_digits=5,decimal_places=2)publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)authors=models.ManyToManyField(to="Author")

views

from django.shortcuts import render,HttpResponse,redirect
from .models import Publish, Authorfrom book.models import *# Create your views here.def add_book(request):if request.method == "POST":title=request.POST.get("title")price=request.POST.get("price")pub_date=request.POST.get("pub_date")publish_id=request.POST.get("publish_id")authors_id_list=request.POST.getlist("authors_id_list")  #getlist 应用在checkbox,select
book_obj=Book.objects.create(title=title,price=price,publishDate=pub_date,publish_id=publish_id)book_obj.authors.add(*authors_id_list)return redirect("/books/")publish_list = Publish.objects.all()author_list = Author.objects.all()return render(request, "addbook.html", {"author_list": author_list,"publish_list": publish_list,})def books(request):book_list=Book.objects.all()return render(request,"books.html",{'book_list':book_list})def change_book(request,edit_book_id):edit_book_obj = Book.objects.filter(pk=edit_book_id).first()  #编辑的对象if request.method == "POST":title = request.POST.get("title")price = request.POST.get("price")pub_date = request.POST.get("pub_date")publish_id = request.POST.get("publish_id")authors_id_list = request.POST.getlist("authors_id_list")  # getlist 应用在checkbox,select
Book.objects.filter(pk=edit_book_id).update(title=title,price=price,publishDate=pub_date,publish_id=publish_id)# edit_book_obj.authors.clear()# edit_book_obj.authors.add(*authors_id_list)
edit_book_obj.authors.set(authors_id_list) #set:先清空,再添加值return redirect("/books/")publish_list=Publish.objects.all()author_list=Author.objects.all()return render(request,"editbook.html",{"edit_book_obj":edit_book_obj,"publish_list":publish_list,"author_list":author_list})def delete_book(request,delete_book_id):Book.objects.filter(pk=delete_book_id).delete()return redirect("/books/")

addbook.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/bs/css/bootstrap.css">
</head>
<body>
<h3>添加书籍</h3>
<div class="container"><div class="row"><div class="col-md-6 col-md-offset-3"><form action="" method="post">{% csrf_token %}<div class="form-group"><label for="">名称</label><input type="text" name="title" class="form-control"></div><div class="form-group"><label for="">价格</label><input type="text" name="price" class="form-control"></div><div class="form-group"><label for="">出版日期</label><input type="date" name="pub_date" class="form-control"></div>                单选框:select+for循环+option                option 元素定义下拉列表中的一个选项(一个条目)。<div class="form-group"><label for="">出版社</label><select name="publish_id" id="" class="form-control" >{% for publish in publish_list %}<option value="{{ publish.pk }}">{{ publish.name }}</option>{% endfor %}</select></div>
          复选框:需要注意,select加上multiple(复选框),其余与单选框相同<div class="form-group"><label for="">作者</label><select name="authors_id_list" id="" multiple class="form-control">{% for author in author_list %}<option value="{{ author.pk }}">{{ author.name }}</option>{% endfor %}</select></div><input type="submit" class="btn btn-default"></form></div></div>
</div></body>
</html>

books.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/bs/css/bootstrap.css">
</head>
<body>
<h3>查看书籍</h3>
<div class="container"><div class="row"><div class="col-md-8 col-md-offset-2"><a href="/books/add/" class="btn btn-primary">添加书籍</a><table class="table table-bordered table-hover table-striped"><thead><tr><th>编号</th><th>书籍名称</th><th>价格</th><th>出版日期</th><th>出版社</th><th>作者</th><th>操作</th></tr></thead><tbody>{% for book in book_list %}<tr><td>{{ forloop.counter }}</td><td>{{ book.title }}</td><td>{{ book.price }}</td><td>{{ book.publishDate|date:"Y-m-d" }}</td><td>{{ book.publish.name }}</td><td>{% for author in book.authors.all %}{% if forloop.last %}<span>{{ author.name }}</span>{% else %}<span>{{ author.name }}</span>,{% endif %}{% endfor %}</td><td><a href="/books/{{ book.pk }}/change/" class="btn btn-warning">编辑</a><a href="/books/{{ book.pk }}/delete/" class="btn btn-danger">删除</a></td></tr>{% endfor %}</tbody></table></div></div>
</div></body>
</html>

editbook.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/bs/css/bootstrap.css">
</head>
<body>
<h3>编辑书籍</h3>
<div class="container"><div class="row"><div class="col-md-6 col-md-offset-3"><form action="" method="post">{% csrf_token %}<div class="form-group"><label for="">名称</label><input type="text" name="title" class="form-control" value="{{ edit_book_obj.title }}"></div><div class="form-group"><label for="">价格</label><input type="text" name="price" class="form-control" value="{{ edit_book_obj.price }}"></div><div class="form-group"><label for="">出版日期</label><input type="date" name="pub_date" class="form-control"value="{{ edit_book_obj.publishDate|date:"Y-m-d" }}"></div><div class="form-group"><label for="">出版社</label><select name="publish_id" id="" class="form-control" value="{{ edit_book_obj.publish }}">{% for publish in publish_list %}{% if edit_book_obj.publish == publish %}<option selected value="{{ publish.pk }}">{{ publish.name }}</option>{% else %}<option value="{{ publish.pk }}">{{ publish.name }}</option>{% endif %}{% endfor %}</select></div><div class="form-group"><label for="">作者</label><select name="authors_id_list" id="" multiple class="form-control">{% for author in author_list %}{% if author in edit_book_obj.authors.all %}<option selected value="{{ author.pk }}">{{ author.name }}</option>{% else %}<option value="{{ author.pk }}">{{ author.name }}</option>{% endif %}{% endfor %}</select></div><input type="submit" class="btn btn-default"></form></div></div>
</div></body>
</html>

转载于:https://www.cnblogs.com/hexiaorui123/p/10590783.html

练习-多表图书管理系统相关推荐

  1. 图书管理系统(SpringBoot+SpringMVC+Mybatis)

    目录 项目业务 开发环境与技术栈 项目功能 项目演示 用户登录 用户管理 学生信息管理和图书信息管理类似于用户管理 图书借阅信息管理 数据库设计 数据表关系图 创建数据库及表 前后端接口 查询专业字典 ...

  2. Python图书管理系统(二)

    文章目录 前言 PyMySQL 安装 PyMySQL 使用 数据库方面的准备 图书管理系统代码          前言    上次写了用IO完成数据存储的图书管理系统, 这次更新一个用MySQL完成数 ...

  3. 使用django创建一个单表查询的图书管理系统

    使用django创建一个单表查询的图书管理系统 在settings.py文件中添加(用于连接mysql数据库) DATABASES = {'default': {'ENGINE': 'django.d ...

  4. 基于顺序表的图书管理系统(C语言)

    Visual Studio编译环境 功能: 0.退出.             1.基于顺序存储结构的图书信息表的创建和输出.             2.基于顺序存储结构的图书信息表的新图书的入库. ...

  5. 顺序表:实现图书管理系统

    引入万能库和命名空间 #include<bits/stdc++.h> using namespace std; 定义结构体 typedef struct {char no[20];char ...

  6. 图书管理系统的数据库表结构(三)

    接图书管理系统的数据库表结构(二) I.1     List of references Name Code Parent Table Child Table Foreign Key Columns ...

  7. 数据结构实验1《基于线性表的图书管理系统》

    数据结构实验1<基于线性表的图书管理系统> (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作 ...

  8. 利用顺序表建立简单图书管理系统

    采用线性表中的顺序储存方式,实现对书籍的增加,删除,查找,展示等基础功能. 基本知识点:顺序表的初始化,顺序表的查找,顺序表的插入以及顺序表的删除. #include <iostream> ...

  9. c语言-图书管理系统(顺序表)

    c语言-图书管理系统--顺序表实现增删改查 采用外部控制台运行,若直接控制台输出,则清屏命令无效 每种图书信息包括ISBN.书名.价格 具有以下几种功能 0.初始化图书表,  1.录入图书信息 ,2. ...

最新文章

  1. LeetCode简单题之检查两个字符串数组是否相等
  2. 【每日一念经】算法岗面经,一万字面试经验你确定不看?
  3. HTML5 —— 视频/音频
  4. ResNets王者回归、「极飞科技」刷新中国农业AI领域最大融资纪录 | AI日报
  5. web布局最实用的12条css技巧
  6. [AWDwR4] Iteration F4
  7. Machine Learning - Andrew Ng on Coursera (Week 3)
  8. find linux 指定后缀_linux下find(文件查找)命令的用法总结
  9. 【论文】 NLP中命名实体识别从机器学习到深度学习的代表性研究
  10. Matlab·Simulink的使用—【S函数的创建与应用】
  11. WebM文件格式标准
  12. PS 模糊图片背景(滤镜)
  13. Python中一个非常高效的json对比库--deepdiff
  14. FFT算法实现,python,Java
  15. 关于马克思《青年在选择职业时的考虑》的读书报告
  16. 房价,经济转型,技术创新
  17. 太阳光轨迹软件_教你记录太阳的轨迹
  18. 给定平面上任意三个点的坐标(x1​,y1​)、(x2​,y2​)、(x3​,y3​),检验它们能否构成三角形。
  19. 儿童定位手表app定制开发有哪些功能
  20. java 英文单词命名缩写_java程序员英文单词缩写和解释

热门文章

  1. DOS下从硬盘安装XP系统方法与要点
  2. WCF 使用证书认证 方法
  3. 62 | 测一测 | 这些软件测试题目,你都掌握了吗?
  4. 关于UI自动化测试元素定位细节记录
  5. 冒泡排序,swich语句,while循环...基础性的一道综合题初学者可以做一个简单的测试...
  6. 孙鑫MFC学习笔记1.Windows应用程序运行机理
  7. ORACLE——重做日志文件管理
  8. 谷歌对用户搜索加密这一做法对seo的影响!
  9. [HDU3691 Nubulsa Expo]
  10. android笔记3:activity的生命周期(转)