多对多外键增删改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 如何给书籍添加作者?
    book_obj = models.Book.objects.filter(pk=1).first()
    # print(book_obj.authors)  # 就类似于你已经到了第三张关系表了
    # book_obj.authors.add(1)  # 书籍id为1的书籍绑定一个主键为1 的作者
    # book_obj.authors.add(2,3)
 
    # author_obj = models.Author.objects.filter(pk=1).first()
    # author_obj1 = models.Author.objects.filter(pk=2).first()
    # author_obj2 = models.Author.objects.filter(pk=3).first()
    # book_obj.authors.add(author_obj)
    # book_obj.authors.add(author_obj1,author_obj2)
    """
    add给第三张关系表添加数据
        括号内既可以传数字也可以传对象 并且都支持多个
    """
 
    # 删
    # book_obj.authors.remove(2)
    # book_obj.authors.remove(1,3)
 
    # author_obj = models.Author.objects.filter(pk=2).first()
    # author_obj1 = models.Author.objects.filter(pk=3).first()
    # book_obj.authors.remove(author_obj,author_obj1)
    """
    remove
        括号内既可以传数字也可以传对象 并且都支持多个
    """
 
 
    # 修改
    # book_obj.authors.set([1,2])  # 括号内必须给一个可迭代对象
    # book_obj.authors.set([3])  # 括号内必须给一个可迭代对象
 
    # author_obj = models.Author.objects.filter(pk=2).first()
    # author_obj1 = models.Author.objects.filter(pk=3).first()
    # book_obj.authors.set([author_obj,author_obj1])  # 括号内必须给一个可迭代对象
 
    """
    set
        括号内必须传一个可迭代对象,该对象内既可以数字也可以对象 并且都支持多个
    """
 
 
    # 清空
    # 在第三张关系表中清空某个书籍与作者的绑定关系
    book_obj.authors.clear()
    """
    clear
        括号内不要加任何参数
     
    """

 有几个注意的:

  在多对多增加的时候,使用的book对象.author(多对多的表)就是进入了第三张表,并且第三张表的bookid就是当前book对象的id,是自动填的,而主动去添加的就是要用book.author.add(2)添加作者的id

  第三张表的字段是各自的主键id,book的id 和 author的id  

  在修改的时候需要传一个可迭代对象,传过去的值 要是没有 就会删除,然后新建,比如第三张表中有1 1,1 3  两条数据,传的是[1,2] 查询1有不删,查询到2没有,删除其他然后创建1 2,(注意整个左边的1一直是book的id,自动传的)

  所以整个修改就很不好, 比如这里面的1书的作者有5个人,分别是 1 1,1 2 ,1 2 ,1 3 ,1 5 然后我传了6 ,这样就把1-5的作者全删了,然后只增了一条1 6 ,这TM还是修改??? 我要修改谁 就不传谁?? 不修改的就将ID都传过去??这是什么鬼

  这个set搞不好,还是先设置is_bool把,把1 3设置false吧  代表1这本书的作者 不是3了, 如果要重新设置1这本书的作者,直接重新新增吧,但是这个就需要半自动建表了,也是麻烦

  注意修改删除的都是查询的那条book的数据,其他的book不受影响

posted @   咖喱给给啊  阅读(33)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示