ORM-增/删/改(多表)

1增

1.1 一对一

#方式一:
obj = models.DetailAuthorInfo.objects.create(
     d_birth='1993-02-24',
     d_telepho='13952551087',
     d_addr='江西省赣州市'
 )
 models.Author.objects.create(
     a_name='Paul',
     a_age=30,
     authorDetail=obj
 )
#方式二:
     obj = models.DetailAuthorInfo.objects.filter(d_addr='青海省').last()
     models.Author.objects.create(
         a_name='老狼',
         a_age=45,
         authorDetail_id=obj.d_id
    )

1.2 一对多(同理也有两种方式)

obj = models.Publisher.objects.get(p_id=3)
models.Book.objects.create(
    b_date='1999-09-09',
    b_price=67.34,
    b_title='春天里的故事',
    publish_id=obj.p_id
)

1.3 多对多(同理也有两种方式)

'''方式一'''
obj = models.Book.objects.filter(b_title='春天里的故事')[0]
obj.authors.add(*[1,2,3])
'''方式二'''
book_obj = models.Book.objects.get(b_id=1)
authors1 = models.Author.objects.get(a_id=2)
authors2 = models.Author.objects.get(a_id=4)
book_obj.authors.add(*[authors1, authors2])

2删

2.1 一对一(分两种情况)

# 表一外键关联到表二,表一删除,不影响表2,表2删除会影响表1
# 删寄生物(Author),不影响宿主(DetailAuthor)
models.Author.objects.get(a_id=1).delete() #情况一(删寄生虫)
models.DetailAuthorInfo.objects.get(d_id=2).delete()  #情况二(删宿主)

2.2 一对多

models.Publisher.objects.get(p_id=1).delete()  #它是大腿,删除它,会影响其他表
models.Book.objects.filter(b_title__startswith='哈利波特').delete()  #删除它,不会影响其他表

2.3 多对多

# 多对多
obj = models.Book.objects.get(b_id=6)
#.remove可以一次性删除一个或多个
obj.authors.remove(3)
obj.authors.remove(*[3,4])
obj.authors.clear()

obj.authors.add(*[3,])
#.set删除后载更新
obj.authors.set('4')
obj.authors.set(['5', '6'])

3 该(更新)

3.1 一对一

# 一对一,可以全部更新,也可以部分更新
models.Author.objects.filter(a_id=5).update(
    a_name = 'Curry',
    a_age = 32,
    authorDetail_id = 1,
)

3.2 一对多

# 一对多,可以全部更新,也可以部分更新
models.Book.objects.filter(b_id=7).update(
    b_title = '我是谁,我在哪里?',
    publish_id = 2,
)
# 因为级联,所以不能更改
'''
models.Publisher.objects.filter(p_id=2).update(
  p_id = 666,
)'''

3.3.3 多对多

.set(同上)

原文地址:https://www.cnblogs.com/messi-mu/p/14267196.html