目录
-
模型
#⼀个出版社可以出版多本书,⼀本书只能被⼀个出版社出版。出版社和图书表属于 #⼀对多,⼀对多⼀般将主表中的主键并到从表中做外键。在模型中⽤ForeignKey表示多对⼀ class Publisher(models.Model): pname = models.CharField(max_length=100,null=True) def __str__(self): return self.pname class Meta: db_table = 'publisher' class Book(models.Model): bname = models.CharField(max_length=200,null=True) #多对⼀模型通过ForeignKey表示多对⼀ #如果publisher定义在book之后,第⼀个参数应该⽤字符串'Publisher' publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE, null=True, db_column='pid', #表中字段名 related_name='books') #通过出版社 查图书时使⽤的关系名 def __str__(self): return self.bname class Meta: db_table = 'book'
-
增加
# 增加 pub = Publisher.objects.first() pub.books.create(bname='红岩') book = Book.objects.get(pk=1) pub.books.add(book) #book必须已经保存到数据库 books = Book.objects.filter(pk__lt=5) pub.books.bulk_create(list(books))
-
删除,更新
pub = Publisher.objects.first() pub.books.all().delete() #删除出版社出版的所有图书 pub.books.all().update(bname='ddd')
-
正反向查询
# 正向查询 def findpublisher(req): pub = Publisher.objects.first() print(pub) # pub = Publisher() book = pub.book_set.all() print(book) return HttpResponse("查询出版社") # 反向查询 def findbook(req): book = Book.objects.first() return HttpResponse(book.publisher.pname)
-
跨关系查询
def loopup(req): # 根据图书获取出版社 pub = Publisher.objects.get(book__bname='花样年华927937') print(pub) # 根据出版社获取图书 books = Book.objects.filter(publisher__pname='科技出版社5829') print(books) return HttpResponse("跨关系查询")