Django 多对多操作

class Book(models.Model):
    name = models.CharField(max_length=32, verbose_name='书名')
    pub = models.ForeignKey('Publisher', on_delete=models.CASCADE,related_name='books', related_query_name='book')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'name'
        verbose_name_plural = verbose_name


class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name='姓名')
    books = models.ManyToManyField('Book')
    
    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "name"
        verbose_name_plural = verbose_name
author_obj = models.Author.objects.filter(pk=1)
author_obj.books    # 管理对象
# all 查询所有关联的对象
author_obj.books.all()

# set 设置关系 [1,2]  [对象,对象]
author_obj.books.set([1,2]) # []

# add 新增关系  id  对象
author_obj.books.add(1,2)

# remove 删除关系   id  对象
author_obj.books.remove(1,2)

# clear 清空关系
author_obj.books.clear()

# create 新增一个所关联的对象,并且和当前的对象绑定关系
author_obj.books.create(name='xxxx', pub_id='10')

# 一对多关系中, 反向查询获取到的关系管理对象
# 参数中只能使用对象,不能使用id
# 当ForeginKey中有参数null=True时,才有remove、clear方法

 

posted @ 2021-08-11 18:12  Star-Hitian  阅读(87)  评论(0编辑  收藏  举报