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和tuple常用方法以及注意事项
Jan 09 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
pandas数值计算与排序方法
Apr 12 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
python3访问字典里的值实例方法
Nov 18 Python
pycharm debug 断点调试心得分享
Apr 16 Python
python 批量压缩图片的脚本
Jun 02 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
require.js的用法详解
2015/10/20 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
Python中类的继承代码实例
2014/10/28 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
明星员工获奖感言
2014/08/14 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
三八节活动简报
2015/07/20 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers