django 多对多表的创建和插入代码实现


Posted in Python onSeptember 09, 2019

这篇文章主要介绍了django-多对多表的创建和插入代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

表的创建

# 作者和书籍之间的多对多关系  
class Author(models.Model):
  '''
  作者表
  '''
  nid = models.AutoField(primary_key=True)
  name = models.CharField(verbose_name='作者名称',max_length=32)
  # 第一种方式直接在作者表中创建ManyToManyField字段(ORM会自动帮我们创建第三张表推荐这种方式)
  author2books = models.ManyToManyField(to='Books')
class Books(models.Model):
  '''
  书籍名称
  '''
  nid = models.AutoField(primary_key=True)
  title = models.CharField(verbose_name='书本名称',max_length=32)
  pid = models.ForeignKey(verbose_name='出版社ID',to='Press',to_field='nid',on_delete=models.CASCADE)
# 第二钟方式手动创建第三张表
# class Books2Author(models.Model):
#   '''
#   书本作者对应表
#   '''
#   nid = models.AutoField(primary_key=True)
#   aid = models.ForeignKey(verbose_name='作者ID',to='Author',to_field='nid')
#   bid = models.ForeignKey(verbose_name='书籍ID',to='Books',to_field='nid')

数据的添加

# 编辑作者
def edit_author(request):
  # 获取作者ID 
  id = request.GET.get('id')
  # 获取所有书籍
  books_lst = models.Books.objects.all()
  # 根据作者ID 获取到作者对象
  author_info = models.Author.objects.filter(pk=id).first()
  if request.method == 'POST':
    # 获取前端传过来的作者新名称
    name = request.POST.get('name')
    # 获取前端传递过来的书籍
    book_lst = request.POST.getlist('books')
    # 根据新名称,更新当前名称
    author_info.name = name
    # 保存数据
    author_info.save()
    # set方法会将当前作者原先的书籍全部删除,然后插入前端传递过来的书籍列表(参数为list类型)
    author_info.author2books.set(book_lst)
    # add方法会将前端传递过来书籍添加到 作者和书籍的对应表中。如果插入重复记录会报错(参数为单个元素,可以插入多个)
    # author_info.author2books.add(*book_lst)
    return redirect('/author_lst/')
  return render(request,'edit_author.html',{'books_lst':books_lst,'author_info':author_info})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python pandas修改列属性的方法详解
Jun 09 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
Django如何使用jwt获取用户信息
Apr 21 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
关于 Python json中load和loads区别
Nov 07 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 #Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 #Python
Python定时发送天气预报邮件代码实例
Sep 09 #Python
python英语单词测试小程序代码实例
Sep 09 #Python
Python实现TCP通信的示例代码
Sep 09 #Python
Python3使用PySynth制作音乐的方法
Sep 09 #Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 #Python
You might like
sphinx增量索引的一个问题
2011/06/14 PHP
php中fsockopen用法实例
2015/01/05 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
python定时器使用示例分享
2014/02/16 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Python项目打包成二进制的方法
2020/12/30 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
读书心得体会
2013/12/28 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
摩登时代观后感
2015/06/03 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
golang 实现并发求和
2021/05/08 Golang
Elasticsearch 数据类型及管理
2022/04/19 Python
python多次执行绘制条形图
2022/04/20 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL