博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

django ORM多对多操作

Posted on 2018-12-18 18:51  alex_hrg  阅读(172)  评论(0编辑  收藏  举报
创建多对多:
	方式一:自定义关系表
		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')
		# 10
		class Application(models.Model):
			name = models.CharField(max_length=32)
		# 2
		
		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)
						
	方式二:自动创建关系表
		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')
		# 10
		class Application(models.Model):
			name = models.CharField(max_length=32)
			r = models.ManyToManyField("Host")
			
		无法直接对第三张表进行操作
		
		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()
		
		
		# 所有相关的主机对象“列表” QuerySet
		obj.r.all()