Django-website 程序案例系列-7 创建多对多关系表
Posted 划得戳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-website 程序案例系列-7 创建多对多关系表相关的知识,希望对你有一定的参考价值。
创建多对多关系表:
方式一:一共三张表其中有一张中间表需要手工建立(建议使用第一种方式自定制程度高)
class Host(models.Model): hostname = models.CharField(max_length=32, db_index=True) ip = models.GenericIPAddressField(db_index=True,protocol="ipv4") port = models.IntegerField() b = models.ForeignKey(‘Business‘, to_field=‘id‘) class Application(models.Model): name = models.CharField(max_length=32) class HostToApp(models.Model): #多对多关系的中间表 hobj = models.ForeignKey(to=‘Host‘, to_field=‘id‘) aobj = models.ForeignKey(to=‘Application‘, to_field=‘id‘)
方式二:一共两张表没有中间表,中间表又django自动生成(默认只能生成3列数据,如果需要更多数据就需要使用方式一来建立多对多关系)
class Host(models.Model): hostname = models.CharField(max_length=32, db_index=True) ip = models.GenericIPAddressField(db_index=True,protocol="ipv4") port = models.IntegerField() b = models.ForeignKey(‘Business‘, to_field=‘id‘) class Application(models.Model): name = models.CharField(max_length=32) r = models.ManyToManyField("Host") #建立多对多的关系,django自动生成中间表
#操作第三章表
obj = Application.objects.get(id=1)
obj.r.add(1) #增加第三张表的关系
obj.r.add(2,3)
obj.r.add(*[1,2,3,4])
obj.r.remove(1) #删除
obj.r.remove(2,3)
obj.r.remove(*[1,2,3])
obj.r.clear() #清空
obj.r.set([3,5,7]) #修改
obj.r.all() #获取所有相关host对象列表(QuerySet)
以上是关于Django-website 程序案例系列-7 创建多对多关系表的主要内容,如果未能解决你的问题,请参考以下文章
Django-website 程序案例系列-6 html模板文件详解
Django-website 程序案例系列-16 modle.form(表单验证)