Django—模型对应关系(一对多)

目录

  1. 模型
  2. 增加
  3. 删除,更新
  4. 正反向查询
  5. 跨关系查询

  1. 模型


    #⼀个出版社可以出版多本书,⼀本书只能被⼀个出版社出版。出版社和图书表属于
    #⼀对多,⼀对多⼀般将主表中的主键并到从表中做外键。在模型中⽤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'
  2. 增加


    
    # 增加
    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))
  3. 删除,更新


    pub = Publisher.objects.first()
    pub.books.all().delete() #删除出版社出版的所有图书
    pub.books.all().update(bname='ddd')
  4. 正反向查询


    # 正向查询
    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)
  5. 跨关系查询


    def loopup(req):
     # 根据图书获取出版社
     pub = Publisher.objects.get(book__bname='花样年华927937')
     print(pub)
     # 根据出版社获取图书
     books = Book.objects.filter(publisher__pname='科技出版社5829')
     print(books)
     return HttpResponse("跨关系查询")
发布了180 篇原创文章 · 获赞 6 · 访问量 2316

猜你喜欢

转载自blog.csdn.net/piduocheng0577/article/details/105010455