栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python django 多对多操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python django 多对多操作

#model.py
创建模型类
class Author(models.Model):    
    first_name = models.CharField(max_length=30)    
    last_name = models.CharField(max_length=40)    
    email = models.EmailField()    
         
class Book(models.Model):    
    title = models.CharField(max_length=200)    
    authors = models.ManyToManyField(Author,relate_name='author')

基本方法
from .model import *
1 # 增、删、改
2 add() # 增加
3 remove() # 删除表,只删一条数据
4 clear() # 清空表, 把所有关系的表全部清空 例如 book_obj.author.clear() 表示把当前书籍的所有作者全部清空

#多对多的查询
从书籍出发获取作者
b = Book.objects.get(id=2)  # 获取主键id值为2的图书对象
b.authors.all()   #查询id为2的书籍的所有作者
b.authors.filter(first_name='jack') #查询id为2的书籍的作者中 firstname是'jack'的,# 这里的author字段是建表时候的字段名

从作者出发获取书籍

a = Author.objects.get(id=2)  # 获取主键id值为2的作者对象
a.book_set.all() 查询发作者表中id=2的作者的所有书籍
#多对多增
 # views.py
 author_list = [1, 2, 3, 4]
 # 获取当前新增的图书对象
 book_obj = Book.objects.create(
             title=123
        )

# 通过当前新增的图书对象在多对多关系表中添加对应关系字段
book_obj.author.add(*author_list)
# save()方法保存
book_obj.save()

# add()方法可以接收一个值,也可以用逗号隔开接收多个值

#多对多改
# views.py
 # 修改图书作者为下方列表
 author_list = [1, 2, 3, 4]
 
 # 获取当前修改的图书对象
 book_obj = Book.objects.filter(id=1).first()
 
 # 先清除当前图书的所有作者再添加
book_obj.author.clear()
book_obj.author.add(*authors_list)
book_obj.save()

# 直接修改
book_obj.author.set(*authors_list)

#多对多删除
# views.py
 
# 直接删除数据
.delete()
 
# 删除外键关系:数据还在
remove(t1,t2,t3)





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886979.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号