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 正则式 概述及常用字符
May 07 Python
python实现在目录中查找指定文件的方法
Nov 11 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
python版本的读写锁操作方法
Apr 25 Python
Python如何发布程序的详细教程
Oct 09 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
Python计算公交发车时间的完整代码
Feb 12 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python文件编写好后如何实践
Jul 07 Python
python 实现体质指数BMI计算
May 26 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
基于mysql的论坛(1)
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP查询分页的实现代码
2017/06/09 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
基于jquery循环map功能的代码
2011/02/26 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python实现登录接口的示例代码
2017/07/21 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
思想政治教育专业个人求职信范文
2013/12/20 职场文书
作风转变心得体会
2014/09/02 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL