#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版权协议,转载请附上原文出处链接和本声明。