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复制文件代码实现
Dec 23 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Python+微信接口实现运维报警
Aug 27 Python
Python函数式编程
Jul 20 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
使用python3实现操作串口详解
Jan 01 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 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
一个程序下载的管理程序(一)
2006/10/09 PHP
php 清除网页病毒的方法
2008/12/05 PHP
如何在php中正确的使用json
2013/08/06 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
vue实现循环切换动画
2018/10/17 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
python导入pandas具体步骤方法
2019/06/23 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
小小商店教学反思
2014/04/27 职场文书
论文评语大全
2014/04/29 职场文书
事业单位考察材料范文
2014/12/25 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python