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获取文件所在目录和文件名的方法
Jan 12 Python
python计算auc指标实例
Jul 13 Python
用python实现对比两张图片的不同
Feb 05 Python
单链表反转python实现代码示例
Feb 08 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
详解python中list的使用
Mar 15 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
用Python selenium实现淘宝抢单机器人
Jun 18 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实现的分页类定义与用法示例
2017/07/05 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
利用Python爬取可用的代理IP
2016/08/18 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
抽象方法、抽象类怎样声明
2014/10/25 面试题
动态密码技术
2012/10/18 面试题
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
vue实现滑动解锁功能
2022/03/03 Vue.js