doraemon的python(大更新) 实例讲解 图书管理系统的配置和应用

### 11.3 图书管理系统

#### 11.3.1 出版社的管理

展示:

- 设计URL

- ```python
  urlpatterns = [
      url(r‘^publisher_list‘,views.publisher_list)
  ]
  ```

- 写函数

- ```python
  from django.shortcuts import render
  from app01 import models

  #展示出版社
  def publisher_list(request):
      #从数据库中查询到出版社的信息
      all_publishers = models.Publisher.object.all()
      #返回到一个包含出版社信息的页面
      return render(request,‘publisher_list.html‘,{‘all-publishers‘:all_publishers})
  ```

- 写模板

- ```html
  <table boder = ‘1‘>
      <thead>
          <th>序号</th>
          <th>ID</th>
          <th>名称</th>
      </thead>

      {% for publisher in all_publishers %}
          <tr>
              <td>{{forloop.counter}}</td>   #自带的功能,生成对应序号
              <td>{{publisher.pk}}</td>    #pk就是primary key主键
              <td>{{publisher.name}}</td>
          </tr>
  </table>
  ```

新增:

```python
obj = models.Publisher.object.create(name=publisher_name)
```

删除

```python
obj_list = models.Publisher.objects.filter(pk=pk)
obj_list.delete()

obj = models.Publisher.objecct.get(pk=pk)
obj.delete()
```

编辑

```python
#修改数据
#首先要获取数据
obj = models.Publisher.objects.filter(name)   # 不考虑重复、空值等情况
obj.name = publisher_name
obj.save
```

#### 11.3.2 书籍管理

```python
class Book(models.Model):
    title = models.CharField(max_length=32)
    pub = models.ForeignKey(‘Publisher‘,on_delete=models.CASCADE) #级连删除,一个表删除,另一个对应的也会删除

on_delete的参数:models.CASCADE models.SET_DEFAULT models.SET_null
```

查询:

```python
all_book = models.Book.objects.all()

for book in all_book:
    print(book.title)
    print(book.pub)   #所关联的出版社对象
    print(book.pub.pk)   #查id  多了一次查询
    print(book.pub_id)   #支架在book表中查出的ID
    print(book.pub.name)
```

新增:

```python
models.Book.object.create(title=book_name,pub=出版社的对象)
models.Book.object.create(title=book_name,pub_id=pub_id)
```

删除:

```python
ps = request.get(‘id‘)
models.Book.object.filter(pk=pk).delete()
```

编辑:

```html
{% if book_obj.pub == publisher%}
    <option selected value="{{publisher.pk}}">{{publisher.name}}</option>
{% else %}
    <option value="{{publisher.pk}}">{{publisher.name}}</option>
{% endif %}
```

```python
#修改数据
book_obj.title = book_name
book.obj.pub = models.Publisher.objects.get(pk=pub_id)
book_obj.save()
```

#### 11.3.3 作者管理

1.创建作者表

```python
class Author(models.Model):
    name = models.CharField(max_length=32)
    book = models.ManyToManFieldy(‘Book‘)
```

2.展示

```python
#展示作者
def author_list(request):
    #查询到所有对象
    all_author = models.Author.object.all()
    return render(request,‘author_list.html‘,{‘all_author‘:all_author})

```

```html
#写模板
{%  for author in all_author%}
    <tr>
        <td>{{forloop.counter}}</td>
        <td>{{author.pk}}</td>
        <td>{{author.name}}</td>
        <td>
            {% for book in author.book.all%}
                {%  if forloop.last%}
                    《{{book.title}}》
                {% else %}
                    《{{book.title}}》
                {%endif%}
            {%endfor%}
        </td>
    </tr>
{%endfor%}
```

3.增加

```python
author_obj = models.Author.objects.create(name=author_name) #只插入到book表中的内容
author_obj = models.set(book)   #设置作者和书籍的多对多的关系
```

4.修改

```python
book = request.POST.getlist(‘book‘)    #获取多个值得时候要用getlist

#修改对象的数据
author_obj.name = name
author_obj.save()
#多对多的关系
author_obj.book.set(books)   #每次重新设置
```

##### 11.3.3.1 django设置多对多关系的三种方法

1.django帮助我们生成第三张表

```python
class Author(models.Model):
    name = models.CharField(max_length=32)
    books = models.ManyToManyField(‘Book‘)  # 不在Author表中生产字段,生产第三张表
```

2.自己创建第三场表

```python
class AuthorBook(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    date = models.DateField()
```

3.自建的表和ManyToMany联合使用

```python
class Author(models.Model):
    name = models.CharField(max_length=32)
    books = models.ManyToManyField(‘Book‘,through=‘AuthorBook‘)  # 不在Author表中生产字段,生产第三张表

class AuthorBook(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    date = models.DateField()
```

原文地址:https://www.cnblogs.com/doraemon548542/p/11595406.html

时间: 2024-10-10 04:36:18

doraemon的python(大更新) 实例讲解 图书管理系统的配置和应用的相关文章

Java JUC之Atomic系列12大类实例讲解和原理分解

Java JUC之Atomic系列12大类实例讲解和原理分解 2013-02-21      0个评论       作者:xieyuooo 收藏    我要投稿 在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含: 基本类:AtomicInteger.AtomicLong.Atomic

用Hbase编写图书管理系统

一.项目介绍 在图书馆,尤其是在各大图书馆,对于图书的管理是相当重要的,而且也是相当麻烦,它是图书管理中最基本的一项常规性的工作.而长期以来,图书管理都是依赖人工进行的,面对如此多的借阅信息就造成相当一部分的资源的浪费.图书管理系统是为了解决图书馆的管理和图书借阅的相关信息的更新操作,包括管理员的调动更新,书籍的添加修改信息,用户的借阅相关书籍以及相关书籍的退还需要在本系统内进行更新操作: 图书管理系统的设计可以最大程度的减轻管理人员的工作量,提升管理图书的效率,通过图书管理系统能过快速找到书籍

[转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 我之前想总结 一直懒 这次国庆加班 也本来计划来着 感冒了 作罢 .. 作者:蓝藻(罗蓝国度) 创建时间:2018.7.3编辑时间:2019.7.16 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为centos7),拒绝复制粘贴: 实用性高:命令多为实际工作中用到的,实例讲解,拒绝纯理论: 条理清晰:分类归纳,快速找到想要的命

【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 .该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型.粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解.

实例讲解Oracle数据库设置默认表空间问题

实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间.导致系统

实例讲解Linux系统中硬链接与软链接的创建

导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说起,下面就以实例讲解Linux系统中硬链接与软链接的创建,来实际看看Linux中两种链接方式的不同. 首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现

触发器实例讲解

SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家. 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create T

SQL触发器实例讲解

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create Table Student(              --学生表         StudentID int primary key,       --学号         ....        )

Python操作Mysql实例代码教程在线版(查询手册)_python

实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con = None try:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('