表格的创建
方式1: publish_obj=Publish.objects.get(nid=1) book_obj=Book.objects.create(title="谁偷了我的奶酪",publishDate="2012-12-12",price=100,publish=publish_obj) 方式2: book_obj=Book.objects.create(title="谁偷了我的奶酪",publishDate="2012-12-12",price=100,publish_id=1
表格绑定多堆多的关系
# 当前生成的书籍对象 book_obj=Book.objects.create(title="追风筝的人",price=200,publishDate="2012-11-12",publish_id=1) # 为书籍绑定的做作者对象 lowen=Author.objects.filter(name="lowen").first() # 在Author表中主键为2的纪录 egon=Author.objects.filter(name="egon").first() # 在Author表中主键为1的纪录 # 绑定多对多关系,即向关系表book_authors中添加纪录 book_obj.authors.add(lowen,egon) # 将某些特定的 model 对象添加到被关联对象集合中。 ======= book_obj.authors.add(*[])
查询:
一对多正向查询
# 查询主键为1的书籍的出版社所在的城市 book_obj=Book.objects.filter(pk=1).first() # book_obj.publish 是主键为1的书籍对象关联的出版社对象 print(book_obj.publish.city)
一对多反向查询
publish=Publish.objects.get(name="苹果出版社") #publish.book_set.all() : 与苹果出版社关联的所有书籍对象集合 book_list=publish.book_set.all() for book_obj in book_list: print(book_obj.title)
一对一查询
1 egon=Author.objects.filter(name="egon").first() 2 print(egon.authorDetail.telephone) 3 4 反向查询# 查询所有住址在北京的作者的姓名 5 6 authorDetail_list=AuthorDetail.objects.filter(addr="beijing") 7 for obj in authorDetail_list: 8 print(obj.author.name)
多对多查询
1 # 金瓶眉所有作者的名字以及手机号 2 3 book_obj=Book.objects.filter(title="金瓶眉").first() 4 authors=book_obj.authors.all() 5 for author_obj in authors: 6 print(author_obj.name,author_obj.authorDetail.telephone) 7 8 9 反向查询 10 # 查询egon出过的所有书籍的名字 11 12 author_obj=Author.objects.get(name="egon") 13 book_list=author_obj.book_set.all() #与egon作者相关的所有书籍 14 for book_obj in book_list: 15 print(book_obj.title)
正向查询按字段,反向查询按表名小写,如果查询对象有多个的话表名小写_set
基于双下划线的扩表查询
1 queryResult=Book.objects 2 .filter(publish__name="苹果出版社") 3 .values_list("title","price") 4 5 # 反向查询 按表名:book 6 7 queryResult=Publish.objects 8 .filter(name="苹果出版社") 9 .values_list("book__title","book__price")