◆ 创建多对多关系:
方式一:自定义关系表:
# host表
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')
# application表
class Application(models.Model):
name = models.CharField(max_length=32)
# host和application关系表:
class HostToApp(models.Model):
hobj = models.ForeignKey(to='Host',to_field='nid')
aobj = models.ForeignKey(to='Application',to_field='id')
两表多对多关联的修改就是操作第三张关系表:
# 新增关联信息:
HostToApp.objects.create(hobj_id=1,aobj_id=2)
方式二:自动创建关系表
# host表
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')
# application表
class Application(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Host") # 多对多关联属性
两表多对多关联的修改无法直接对第三张表进行操作,必须通过多对多关联属性进行操作
#获取application对象
obj = Application.objects.get(id=1)
obj.name
# 第三张表操作
obj.r.add(1)
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()
#重新设置r的对应关系
obj.r.set([3,5,7])
# 所有相关的主机对象“列表” QuerySet
obj.r.all()