数据库的简单多对多
自己创建第三张表:
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")