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 list使用示例 list中找连续的数字
Jan 27 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
Python三级目录展示的实现方法
Sep 28 Python
Python 序列的方法总结
Oct 18 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 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
php中autoload的用法总结
2013/11/08 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
js电话号码验证方法
2015/09/28 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
个人贷款承诺书
2014/03/28 职场文书
采购意向书范本
2014/03/31 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
孩子教育的心得体会
2014/09/01 职场文书
实习生矿工检讨书
2014/10/13 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
python编写五子棋游戏
2021/05/25 Python
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android