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

目录

  1. 模型
  2. 增加
  3. 删除
  4. 正反向查询

  1. 模型


    ;⼀个买家可以购买多件商品,⼀件商品可以被多个买家购买,买家和商品之间构成
    ;多对多关系,多对多关系必然会⽣成⼀张中间表:买家-商品表,记录商品和买家
    ;的关系,该表包含商品表主键和买家表的主键
    
    from django.db import models
    # Create your models here.
    class Buyer(models.Model):
     bname = models.CharField(max_length=30)
     level = models.IntegerField(default=1)
    class Goods(models.Model):
     gname = models.CharField(max_length=100)
     price = models.FloatField()
     buyer = models.ManyToManyField(Buyer) #这种写法⾃动⽣成第三张表,但
    我们⽆法直接控制
     def __str__(self):
     return self.gname +" "+ str(self.price)
    #⼿动创建中间表
    class Orders(models.Model):
     buyer =
    models.ForeignKey(Buyer,on_delete=models.CASCADE,db_column='bid')
     goods =
    models.ForeignKey('Goods',on_delete=models.CASCADE,db_column='gid')
     num = models.Integer(default=1)
    class Goods(models.Model):
     gname = models.CharField(max_length=100)
     price = models.FloatField()
     buyer = models.ManyToManyField(Buyer,through='Orders')
  2. 增加


    def sellgoods(req):
     goods = Goods.objects.get(pk=randint(1,Goods.objects.count()))
     
    goods.buyer.add(Buyer.objects.get(pk=randint(1,Buyer.objects.count())
    ))
     goods.save()
     return HttpResponse("剁⼿成功")
  3. 删除


     buyer = Buyer.objects.get(pk=13)
    goods = Goods.objects.filter(pk__lt=10)
    buyer.goods_set.clear() #删除所有商品
    buyer.goods_set.remove(Goods.objects.get(pk=2)) #删除指定商品
  4. 正反向查询


    # 正向查询
    
    def findgoods_by_buyer(req):
     buyer = Buyer.objects.get(pk=13)
     res = buyer.goods_set.all()
     print(res)
     return HttpResponse("由买家查询商品")
    
    
    # 反向查询
    def findbuyer_by_goods(request):
     goods = Goods.objects.last()
     buyer = goods.buyer.all()
     print(buyer)
     return HttpResponse("由商品查询买家")
发布了180 篇原创文章 · 获赞 6 · 访问量 2315

猜你喜欢

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