Django ORM多对多增删改查
1、创建两张表
class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField(Book) class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=5 , decimal_places=2)
2、查询数据
#看下authors对象 book_obj = Book.objects.get(id=1)#获取一个书籍的对象,有可能是多个作者写的,是一个集合对象, #获取id=1 这本书的作者集合对象,类似列表结构 print(book_obj.authors) #gu_orm.Author.None ,是id=1的这本书,没有作者,所以得到一个None #如果给Book和author绑定了关系,添加值,就会得到一个Queryset集合, print(book_obj.authors.all())
3、增加数据
# 增加数据 方法1、 步骤1 ,先得到一个Book对象 book_obj = Book.objects.get(id=1)#获取一个书籍的对象,有可能是多个作者写的,是一个集合对象 步骤2 :获取1个或2个以上author对象 author1 = Author.objects.get(id=1) author2 = Author.objects.get(id=2) 步骤3: 把author1,和author2 添加到 book_obj 对象中,使用add方法,书对象关联的作者表,添加2个作者对象 #book表与author表绑定关系,把2个作者对象添加到,关联到Book对象 book_obj.authors.add(author1,author2) 方法2:多对多关系的创建,获取所有的对象集合,添加 ,记得用 * 号,把列表拆开,一个个的获取对象 #先获取一个book对象, book_obj = Book.objects.get(id=1) #方法2 ,把所有的author加到book对象中 author_list = Author.objects.all() book_obj.authors.add(*author_list)
4、删除数据
解除关联关系 clear() : 清除所有的关系 remove() : 删除指定的关系 #解除关联关系 book_obj.authors.clear()#解除了书与作者的所有关系, #指定删除Book与作者的关系,先获取要解除关联的对象,然后用remove的方法, author = Author.objects.get(name = 'alex') book_obj.authors.remove(author)
5、修改数据
#修改数据 book_obj.authors.clear()#修改了书与作者的所有关系, book_obj.authors.set([1,2,3])