Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all)
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 %}
<< {{ 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)的更多相关文章
- Django图书管理系统(前端对有外键的数据表增删改查)
图书管理 书籍管理 book name 项目源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E ...
- Django(图书管理系统1)
day63 内容回顾 1. 单表的增删改查 1. 删和改 1. GET请求 URL传值 1. 格式 ...
- Django图书管理系统(前端对数据库的增删改查)
图书管理系统 出版社的管理 源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E7%9B%AE/ ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- django 图书管理系统
一.图书管理系统 单表的增删改查 1.创建项目 2.注释掉中间件 就可以提交post 请求 3.配置静态文件 并手动创建static 文件夹存放静态文件 二.具体的数据库配置 1.创建数据库 2. ...
- Django——图书管理系统
基于Django的图书管理系统 1.主体功能 1.列出图书列表.出版社列表.作者列表 2.点击作者,会列出其出版的图书列表 3.点击出版社,会列出旗下图书列表 4.可以创建.修改.删除 图书.作者.出 ...
- django图书管理系统实例
首页,其他页面全部继承首页的上半部分 点击发布图书页面 首页点击书名,跳转到图书信息界面,该界面可删除图书 项目结构 #views.py from django.shortcuts import re ...
- Django(图书管理系统2)
day64 内容回顾 1. ORM外键操作 图书表和出版社表 多对一 的关系 # 书 class Book(models.Model): ...
- Django图书管理系统(单表操作)
以下内容需要掌握: Python3 以及前端:HTML,CSS,jQuery,BootStrap,Django,JavaScript 开启Django新项目: 1,settings.py 数据库选择: ...
随机推荐
- Python实战之ATM+购物车
ATM + 购物车 需求分析 ''' - 额度 15000或自定义 - 实现购物商城,买东西加入 购物车,调用信用卡接口结账 - 可以提现,手续费5% - 支持多账户登录 - 支持账户间转账 - 记录 ...
- Iptables不适用与socks协议吗?
需求描述 现有一个台多公网IP服务器,用作于内网网关,通过NAT访问公网使用,要求不同的内网地址访问公网时使用不同的公网IP.可以简单理解为内网与公网IP进行一对一访问外网的映射. 服务器名称 I ...
- java 的守护进程脚本
#!/bin/sh ] do Tag=`ps -ef|grep 'jar包名称'|grep -v grep|wc -l|awk '{printf $1"\n"}'` ] then ...
- xshell跳转设置 Xshell代理设置
本机------->A(中转)------>B(目标服务器) 本机---------XXXXX------>B(目标服务器) 本机无法直接连接B服务器 第一步:本机连接中转服务器A, ...
- Checking Types Against the Real World in TypeScript
转自:https://www.olioapps.com/blog/checking-types-real-world-typescript/ This is a follow-up to Type-D ...
- Python实现电子词典(图形界面)
Python实现电子词典(图形界面) 终端电子词典:https://www.cnblogs.com/noonjuan/p/11341375.html 文件一览: .├── client.py├── d ...
- PATA1012The Best Rank(25分)
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- django数据处理
目录 django积累 连接数据库: 模板 后台管理 功能扩展: 日志打印: django积累 连接数据库: 连接数据库 : 1.创建数据库 create database oa default ch ...
- mysql(七)查询基本语法
连接 外连接 如表-------------------------------------------------table1 | table2 |------------------------- ...
- 【Gamma】“北航社团帮”展示博客
目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...