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])

 

posted @ 2020-07-06 17:10  小粉优化大师  阅读(574)  评论(0)    收藏  举报