一、初始Ajax
ajax的写法:
$.ajax({ url:'/host', type:'POST' data:{'k1':123,'k2':'root'} success:function(data){ }#执行成功后自动触发这个函数 })
ajax的使用:
#在JavaScript中写jquery $('#ajax_submit').click(function(){ $.ajax({ url:'/ajax_text', type:'GET' data:{'user':'root','pwd':'234'} success:function(data){ alert(data) }#执行成功后自动触发这个函数 })
一些注意的地方:
在JavaScript中将字符串转换为对象: JSON.parse(data) 对象转化为字符串: JSON.stringfy(data) 建议:永远让服务端返回一个字典 return HttpResponse(json.dumps(字典)) ajax 将form中的数值打包: data:$('#add_form').serialize()
当数据有列表时,加入traditional
加入dataType 可以自动将字符串转换为json对象形式
$.ajax({ url:'/host', type:'POST' data:{'k1':123,'k2':[1,2,3]} dataTpye:json traditional:True success:function(data){ }#执行成功后自动触发这个函数 error:function(){}#未知错误时 })
二、多对多
创建多对多:
方式一:自定义关系表 class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32) 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')
方式二:自动创建关系表 class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32) class Application(models.Model): name = models.CharField(max_length=32) r = models.ManyToManyField('Host')
操作:
1. HostTOApp.objects.create(hobj_id = 1, aobj_id = 2) #但是自动创建的无法直接对第三张表进行操作 2. 添加: 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,4]) obj.r.clear() 更新数据 obj.r.set([3,5,7]) 获取所有相关应用的主机列表: obj.r.all() queryset 对象