django 多对多表的创建和插入代码实现
作者:信奉上帝的小和尚 时间:2021-05-09 03:50:34
这篇文章主要介绍了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})
来源:https://www.cnblogs.com/wtil/p/11480784.html
标签:django,多对多,表,创建,插入
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python 使用 PyQt5 开发的关机小工具分享
2023-09-15 05:06:02
pandas DataFrame的修改方法(值、列、索引)
2021-10-17 11:35:10
Python程序实现向MySQL存放图片
2022-12-02 13:34:38
![](https://img.aspxhome.com/file/2023/0/67840_0s.png)
Flask 使用工厂模式
2021-10-01 01:52:58
![](https://img.aspxhome.com/file/2023/6/72936_0s.png)
python删除过期log文件操作实例解析
2021-02-03 18:29:36
python计算最小优先级队列代码分享
2022-12-05 03:26:50
python使用pyaudio录音和格式转化方式
2023-11-07 19:30:03
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2023-09-06 22:11:25
![](https://img.aspxhome.com/file/2023/4/109584_0s.png)
pandas的排序、分组groupby及cumsum累计求和方式
2023-07-20 07:00:39
![](https://img.aspxhome.com/file/2023/4/63914_0s.png)
使用python实现rsa算法代码
2022-07-12 14:06:10
Python的Django框架中settings文件的部署建议
2023-07-08 21:39:43
详解Python中的正斜杠与反斜杠
2021-06-28 08:38:10
微信小程序之多文件下载的简单封装示例
2023-10-19 21:10:06
树莓派使用python-librtmp实现rtmp推流h264的方法
2021-10-24 13:50:15
Pycharm学习教程(1) 定制外观
2021-08-01 05:18:11
![](https://img.aspxhome.com/file/2023/4/77584_0s.jpg)
Python+PyQT5实现手绘图片生成器
2022-03-11 11:57:21
![](https://img.aspxhome.com/file/2023/5/133425_0s.png)
Python标准库学习之psutil内存详解
2023-09-14 21:33:35
![](https://img.aspxhome.com/file/2023/8/112138_0s.png)
设计和布局之间的思考
2008-10-09 13:06:00
python中的load、loads实现反序列化示列
2023-04-01 23:49:56
Python之如何调整图片的文件大小
2022-09-27 04:57:50
![](https://img.aspxhome.com/file/2023/7/117917_0s.jpg)