数据库的简单多对多

自己创建第三张表:

  class Book (models.Model):
         name== models.CharField(max_length=64)
  class Author (models.Model):
         name== models.CharField(max_length=64)
  class A_to_B(models.Model):
         bid = models.ForeignKey("Book", on_delete=models.CASCADE)
         aid = models.ForeignKey("Author", on_delete=models.CASCADE)
             
             联合为一
             class Meta:
                  unique_together=(
                  ('bid','aid'),
                  
                  )

数据库表:

 class Menus(models.Model):
                          dishes = models.CharField(max_length=64)
                          price = models.CharField(max_length=64)
                          def __str__(self):
                              return self.dishes


 class guke(models.Model):
                           name = models.CharField(max_length=64)
                           menu = models.ManyToManyField("Menus")
                           def __str__(self):
                               return self.name

views.py

def guke(request):
    
    # 正向查找
    # obj=models.guke.objects.get(id=1)
    # obj.menu.all()
    # print(obj)
    
    
    # 反向查找
    # obj=models.Menus.objects.get(id=24)
    通过菜名找到顾客的名字
    # a=obj.guke_set.all()
    # print(a,obj)
    
    
    
    # obj=models.guke.objects.all()
    # for o in obj:
    #  print(o.name,o.menu.all())

通过“外键————”找到第三张表的数据

 # obj = models.guke.objects.values('id', 'name', 'menu', 'menu__dishes', 'menu__price')
    # for iten in obj:
    #     print(iten['id'], iten['name'], '菜名', iten['menu'], iten['menu__dishes'], iten['menu__price'])

增加对应关系:

# 基于guke表进行操作

obj=models.guke.objects.get(id=1)
# 在第三张表中增加对应关系
obj.menu.add(2)
obj.menu.add(*[28,29,30,31,32,33])
# 删除对应关系
obj.menu.remove(28,29,30)
# 清除对应的关系
obj.menu.clear()
# 相当于update更新
obj.menu.set([25,26])

return HttpResponse("ok")

# 基于Menus表进行操作

obj=models.Menus.objects.get(id=25)
obj.guke_set.add(*[2,1,3])
obj.guke_set.remove(2)

return HttpResponse("ok")

 

posted on 2019-03-30 13:50  Mentality  阅读(136)  评论(0编辑  收藏  举报