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之大话题小函数(1)
Oct 10 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
Django中反向生成models.py的实例讲解
May 30 Python
python 平衡二叉树实现代码示例
Jul 07 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
用Python实现Newton插值法
Apr 17 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巧获服务器端信息
2006/12/06 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php json相关函数用法示例
2017/03/28 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
手机端转换rem适应
2017/04/01 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
numpy中索引和切片详解
2017/12/15 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
C#基础面试题
2016/10/17 面试题
新学期开学寄语
2014/01/18 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
竞聘书的秘诀
2019/04/02 职场文书
八年级作文之感恩
2019/11/22 职场文书
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python