Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all)

一丶多对多查询

表建立多对多关系的方式

​ django通过ManyToManyField自动创建第三张表

# 1 . django通过ManyToManyField自动创建第三张表
class Book(models.Model):
title = models.CharField(max_length=32)
pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)
# authors = models.ManyToManyField('Author') # 描述多对多的关系 不生成字段 生成关系表 def __repr__(self):
return self.title __str__ = __repr__ class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField('Book') # 描述多对多的关系 不生成字段 生成关系表

​ 手动创建第三张表

class Book(models.Model):
title = models.CharField(max_length=32) class Author(models.Model):
name = models.CharField(max_length=32) class Book_Author(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
date = models.DateField()

​ 自己创建 + ManyToManyField(仅限查询)

# 使用 手动创建第三章表和 ManyToMany字段时. ManyToMany的set功能可能不会更好的应用,当第三张表存在其他的字段不能通过set设置值.

class Book(models.Model):
title = models.CharField(max_length=32) class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField(Book, through='Book_Author') class Book_Author(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
date = models.DateField() # 不能通过ManyToMany字段的set设置值

查询

# python后端
all_authors = models.Author.objects.all().order_by('id') for author in all_authors:
print(author)
print(author.name)
print(author.pk)
print(author.books) # 关系管理对象
print(author.books.all()) # 查询所有的,所关联的所有对象 # html前端
{% for author in all_author %} ## 循环得到每个作者对象
<tr>
<td>
<input type="checkbox" >
</td>
<td>{{ forloop.counter }}</td>
<td>{{ author.pk }}</td>
<td>{{ author.username }}</td>
<td>
# book_obj 是从后端传递过来的对象,
# author.books.all 是通过查询 Author表中的books属性获得一个关系管理对象,
# .all 在前端页面不用加括号 ,查询到的是每一个book图书对象.
{% for book_obj in author.books.all %}
&nbsp;&nbsp;&nbsp;<< {{ book_obj.bname }}>>
{% endfor %} </td>
<td><a class="btn btn-warning btn-sm" href="/author_edit?pk={{ author.pk }}">编辑</a> <a class="btn btn-danger btn-sm" href="/author_del?pk={{ author.pk }}">删除</a>
</td>
</tr>
{% endfor %}

新增

# python后台 request接收前端发过来的数组类型的数据. 使用getlist()
books = request.POST.getlist('books') # 获取多个元素 # 新建作者
author_obj = models.Author.objects.create(name=name)
# 给作者和书籍绑定关系
author_obj.books.set(books) # 【id,id】 # 关系管理对象使用set方法,自动循环插入数据

反查询

​ 通过设置ManyToMany字段对应的那张表.

# 多对多
class Book(models.Model):
bname = models.CharField(max_length=32, unique=True)
bprice = models.CharField(max_length=32)
pid = models.ForeignKey('Publish', on_delete=models.CASCADE)
# 外键参数说明:
# to_field :被关联对象的用于关联的字段. 默认情况, Django 使用被关联对象的主键
# on_delete : models.CASCADE 级联删除
# models.SET(1) 将当前字段的值设置成1
# models.SET_DEFAULT 设置默认值, 需要设置default:default=11
# models.SET_NULL 设置为空,需要设置 : null=True
# models.DO_NOTHING 什么都不做,关联的数据删除后不影响当前字段的值 class Author(models.Model):
username=models.CharField(max_length=32)
books=models.ManyToManyField('Book') # 设置了多对多关系, 对应的是book对象 # 前端页面,通过book对象反查作者表中的数据 , book.author_set是一个关系管理对象
<!--反查: book.author_set.all -->
{% for author in book.author_set.all %}
{{ author.username }}
{% endfor %}

Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all)的更多相关文章

  1. Django图书管理系统(前端对有外键的数据表增删改查)

    图书管理 书籍管理 book name 项目源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E ...

  2. Django(图书管理系统1)

    day63 内容回顾     1. 单表的增删改查         1. 删和改             1. GET请求 URL传值                 1. 格式            ...

  3. Django图书管理系统(前端对数据库的增删改查)

    图书管理系统 出版社的管理 源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E7%9B%AE/ ...

  4. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  5. django 图书管理系统

    一.图书管理系统 单表的增删改查 1.创建项目 2.注释掉中间件 就可以提交post 请求 3.配置静态文件 并手动创建static 文件夹存放静态文件  二.具体的数据库配置 1.创建数据库  2. ...

  6. Django——图书管理系统

    基于Django的图书管理系统 1.主体功能 1.列出图书列表.出版社列表.作者列表 2.点击作者,会列出其出版的图书列表 3.点击出版社,会列出旗下图书列表 4.可以创建.修改.删除 图书.作者.出 ...

  7. django图书管理系统实例

    首页,其他页面全部继承首页的上半部分 点击发布图书页面 首页点击书名,跳转到图书信息界面,该界面可删除图书 项目结构 #views.py from django.shortcuts import re ...

  8. Django(图书管理系统2)

    day64 内容回顾     1. ORM外键操作         图书表和出版社表  多对一 的关系              # 书     class Book(models.Model):   ...

  9. Django图书管理系统(单表操作)

    以下内容需要掌握: Python3 以及前端:HTML,CSS,jQuery,BootStrap,Django,JavaScript 开启Django新项目: 1,settings.py 数据库选择: ...

随机推荐

  1. (HK1-1)海康网络摄像机的使用

    https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作:  首先在莹石商城官网https://www.ys7.com/下 ...

  2. DCI学习链接及文章

    https://www.jianshu.com/u/c1b1137d5886 李永顺 https://www.jianshu.com/users/7386692d5489/timeline 袁英杰 小 ...

  3. ABP .net framework版 的发布

    先正常的发布流程走 特别的如下图

  4. three.js 打包为一个组-几个单独的模型

    代码: <!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl ...

  5. selenium--上传文件

    前戏 在进行web自动化的时候,经常需要用到上传文件的功能,selenium可以使用send_keys()来上传文件,但是使用send_keys()上传文件有很大的局限性,只能上传input标签的,好 ...

  6. bzoj2916: [Poi1997]Monochromatic Triangles 思路

    bzoj2916: [Poi1997]Monochromatic Triangles 链接 bzoj 思路 总方案\(C_{n}^{3}-异色三角形\) 异色三角形有个特点. 会出现两个点有两条不同色 ...

  7. nuxtjs如何在单独的js文件中引入store和router

    nuxtjs里面集成vuex的创建方式改变了,并且官方不建议以导出Vuex实例的方式创建store,并且会在nuxt3里面删除.这样就会存在一个问题,我怎么像普通vue spa项目一样直接 impor ...

  8. 【BigData】Java基础_创建一个订单类

    需求描述 定义一个类,描述订单信息订单id订单所属用户(用户对象)订单所包含的商品(不定数量个商品对象)订单总金额订单应付金额:    总金额500~1000,打折85折    总金额1000~150 ...

  9. centos虚拟机扩展磁盘空间(经历无数坑,血一样总结,史上最全)

    第一步 在vmware中将虚拟机关机后,鼠标右键设置,直接点击扩展加自己想要扩展的数量就可以了,这个比较简单不多说. 2 第二步 设置后进系统查看空间大小变化,实际并没有什么变化,我用的命令是df - ...

  10. sklearn保存模型的两种方式

    sklearn 中模型保存的两种方法   一. sklearn中提供了高效的模型持久化模块joblib,将模型保存至硬盘. from sklearn.externals import joblib # ...