Django day08 多表操作 (二) 添加表记录

一: 一对多

  1. 一对多新增

两种方式:  publish = 对象    publish_id = id

  1. publish_id 和 publish 的区别就是:
    1)publish_id 可以手动输入要查询的书籍的出版社 如: 方式一
    2)publish 要查询书籍出版社需要从数据库中取出出版社对象, 如: 方式二

# 一对多新增数据
    # 添加一本北京出版社出版的书
    # 方式一
    ret = Book.objects.create(name='妈妈再爱我一次', price=25, publish_id=1)
    print(ret.name)

    # 方式二, 存对象publish=出版社的对象,存到数据库,是一个id
    # publish=Publish.objects.get(id=2)
    # publish=Publish.objects.get(pk=2)
    # pk 和 id 的作用一样,都是主键,可以通过主键查找,主键只有一个
    # 如果用filter 必须在后面加一个 .first()
    publish = Publish.objects.filter(pk=2).first()  # 从数据里面取出出版社对象
    ret = Book.objects.create(name='爸爸再爱我一次', price=35, publish=publish)
    print(ret.name)

      2. 一对多修改: 学习了单表操作,新增数据这一些,和修改数据是一个意思

# 一对多修改数据
    # 方式一:
    book = Book.objects.get(pk=1)
    # book.publish=出版社对象
    book.publish_id = 2
    book.save()

    # 方式二
    # book=Book.objects.filter(pk=1).update(publish=出版社对象)
    # book=Book.objects.filter(pk=1).update(publish_id=1)

  3. 一对多删除: 删除数据就是直接删除就可以了,不过删除大数据要谨慎,能虚就虚,不然就要删库跑路了

二: 多对多

  - 多对多常用的API

    # book_obj.authors.add() 添加
    # book_obj.authors.remove() 特定的关联对象从集合中去除, 比如说,移除某书籍的作者
    # book_obj.authors.clear() 清空所有书籍的作者
    # book_obj.authors.set() 先清空,再设置

 1. 多对多新增,add

 # 多对多新增(书籍跟作者的关系)
        # 1. 为妈妈再爱我一次这本书新增一个叫prince, bp 的作者
    # prince = Author.objects.filter(name='prince').first()  # 拿到作者这个对象
    # bp = Author.objects.filter(name='bp').first()  # 新增两个作者
    book = Book.objects.filter(name='妈妈再爱我一次').first()  # 要新增就要查到这本书
    # add 添加多个对象 对象用逗号隔开
    # book.author.add(prince, bp)  # 书籍表的authors
    # add 添加作者id
    book.author.add(1, 2)

 2. 多对多删除,remove

    # 多对多新增(书籍跟作者的关系)
    # prince = Author.objects.filter(name='prince').first()  # 拿到作者这个对象
    # book = Book.objects.filter(name='妈妈再爱我一次').first()  # 要新增就要查到这本书
    #

    # 删除 remove ,可以传对象, 可以传id, 也可以传多个,但不要混着用
    # 删除一个叫prince的作者
    # book.author.remove(prince)
    # book.author.remove(2)
    book.author.remove(1, 2)

3. 清空, clear

 # 清空 clear,清空所有,不需要传参数
    book.author.clear()

4. 先清空, 在新增 set

 # 先清空,在新增 set ,
    book.author.set(2)

 # 注意: 这样是错误的, 打印时会出现 TypeError: 'int' object is not iterable 这样的错误, 我们必须传一个可迭代的对象出来, 改成下面这样,就可以了
# 要传一个列表,列表内可以是id, 也可以是对象
book.author.set([2, ])

 

 

 

2.

2.

2.

 

posted @ 2018-11-13 11:19  温暖你的心  阅读(145)  评论(0编辑  收藏  举报