首页 > 代码库 > django进阶
django进阶
多对多:
创建多对多:
方式一:自定义关系表
class Host(models.Model): nid=models.AutoField(primary_key=True) hostname=models.CharField(max_length=32,db_index=True) ip=models.GenericIPAddressField(db_index=True) port=models.IntegerField() b=models.ForeignKey(‘Business‘,to_field=‘id‘) #自定义关联 class HostToApp(models.Model): hobj=models.ForeignKey(to=‘Host‘,to_fields=‘nid‘) aobj=models.ForeignKey(to=‘Application‘,to_fields=‘id‘)
对表的操作和foreignkey一样,并且可以直接对这个表进行操作
HostToApp.objects.create(hobj_id=1,aobj_id=2)
方式二:自动创建关系表
1 class Host(models.Model): 2 nid=models.AutoField(primary_key=True) 3 hostname=models.CharField(max_length=32,db_index=True) 4 ip=models.GenericIPAddressField(db_index=True) 5 port=models.IntegerField() 6 b=models.ForeignKey(‘Business‘,to_field=‘id‘) 7 8 class Application(models.Model): 9 name=models.CharField(max_length=64) 10 auto=models.ManyToManyField("Host")
缺点就是无法直接对第三张表进行操作,只能间接的方式来操作并且也无法在这个表增加多余字段
#现获取对象
obj = Application.objects.get(id=1)
# 然后间接操作第三张表中的内容
#增加
obj.r.add(1)#Application=1 host=1 obj中已经存在了app id 所以这里的add=1就是host表中的id
obj.r.add(2)#Application=1 host=2
obj.r.add(2,3,4)#Application=1 host=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中的app id =1的所有内容
obj.r.clear()
#更新
obj.r.set([3,5,7])
# 所有相关的主机对象“列表” QuerySet
obj.r.all()
增删改查例子
def app(reques): obj=models.Application.objects.all() print(obj) for i in obj: #查询 print(i.name,i.auto.all()) #增加app项目并且返回这个obj对象 #obj=models.Application.objects.create(name=‘oracle‘) #增加1,3,4host到app #obj.auto.add(*[1,4,3]) #删除 # obj=models.Application.objects.get(id=1) # obj.auto.remove(1) # return render(reques,‘app.html‘,{‘obj‘:obj}) return HttpResponse("ok")
django进阶
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。