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("跨关系查询")

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值