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提取网页中超链接的方法
Sep 18 Python
python实现简单爬虫功能的示例
Oct 24 Python
Python中一行和多行import模块问题
Apr 01 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python列表对象实现原理详解
Jul 01 Python
WxPython实现无边框界面
Nov 18 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python用什么编辑器进行项目开发
Jun 17 Python
python判断是空的实例分享
Jul 06 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
方法汇总:Python 安装第三方库常用
Apr 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
PHP 采集程序 常用函数
2008/12/18 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php使用codebase生成随机数
2014/03/25 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
python聊天程序实例代码分享
2013/11/18 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
python从子线程中获得返回值的方法
2019/01/30 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
买卖车协议书
2014/04/21 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python