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)






版权声明:本文为dreams_dream原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。