ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 创建多对多 一台主机Host可能部署了好几个应用Application,一个应用Application可能部署在好几台主机Host。因此形成了多次多的关系。因此需要关系表。 ### 自定义多对多关系表 HostToApp ~~~ class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32,db_index=True) ip = models.GenericIPAddressField(protocol="ipv4",db_index=True) port = models.IntegerField() b = models.ForeignKey(to="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='nid') aobj = models.ForeignKey(to='Application',to_field='id') ~~~ ### 操作 增删改查都可以通过关系表进行 ### 自动创建关系表 ManyToManyField ~~~ class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32,db_index=True) ip = models.GenericIPAddressField(protocol="ipv4",db_index=True) port = models.IntegerField() b = models.ForeignKey(to="Business", to_field='id') class Application(models.Model): name = models.CharField(max_length=32) r = models.ManyToManyField("Host") ~~~ ### 操作 在这里, 无法直接对第三张表进行操作 先获取Application的对象 ~~~ obj = Application.objects.get(id=1) ~~~ * 查看所有相关的主机对象“列表” QuerySet ~~~ obj.r.all() ~~~ * 增加 ~~~ obj.r.add(2) obj.r.add(2,3,4) obj.r.add(*[1,2,3,4]) ~~~ * 删除 ~~~ obj.r.remove(1) obj.r.remove(2,4) obj.r.remove(*[1,2,3]) ~~~ * 清空 ~~~ obj.r.clear() ~~~ * 更新 ~~~ obj.r.set([3,5,7]) ~~~