python Django数据部分操作

发布时间:2024-12-05 07:23

掌握数据分析工具如Excel或Python的基础操作 #生活技巧# #工作学习技巧# #数字技能学习#

Django 数据部分操作

一对多关系表单数据表单数据的三种获取方式Ajax提交数据多对多关系

一对多关系

使用外键进行一对多关系的创建 1

业务线

class Business(models.Model): #id caption = models.CharField(max_length=32) code = models.CharField(max_length=32,null=True,default='sa')123

创建一个主机表

class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = models.CharField(max_length=32,db_index=True) # ip = models.IPAddressField(db_index=True) ip = models.GenericIPAddressField(protocol="ipv4",db_index=True) port = models.IntegerField() b = models.ForeignKey(to="Business",to_field='id',on_delete=models.CASCADE)123456

表单数据

form 表单提交数据,及相关js部分操作 1

html部分

<div class="add_modal hide"> <form id="add_form" action="/host/" method="post"> <div class="group"> <input id="host" type="text" placeholder="主机名" name="hostname"> </div> <div class="group"> <input id="ip" type="text" placeholder="IP" name="ip"> </div> <div class="group"> <input id="port" type="text" placeholder="端口" name="port"> </div> <div class="group"> <select id="sel" name="b_id"> {% for op in b_list %} <option value="{{ op.id }}">{{ op.caption }}</option> {% endfor %} </select> </div> <input type="submit" value="提交"> <a href="" id="ajax_submit" style="display: inline-block;padding: 5px;background: blue; color:white;text-decoration: none; white;"> 悄悄提交</a> <input id="cancel" type="button" value="取消"> <span id="error_msg" style="color: red;"></span> </form>

12345678910111213141516171819202122232425262728

js部分

$('#ajax_submit').click(function () { $.ajax({ url:"/test_ajax/", {#type:'GET',#} type:'POST', {#data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},#} data:$('$add_form').serialize(), success:function (data) {{% comment %} if(data == 'Success'){ location.reload() } else{ alert(data); }{% endcomment %} var obj = JSON.parse(data); if(obj.status){ location.reload(); } else{ $('#error_msg').text(obj.error) } } }) });

123456789101112131415161718192021222324

表单数据的三种获取方式

v1 = models.Business.objects.all() # QuerySet ,内部元素都是对象 # QuerySet ,内部元素都是字典 v2 = models.Business.objects.all().values('id','caption') # QuerySet ,内部元素都是元组 v3 = models.Business.objects.all().values_list('id','caption') # 获取到的一个对象,如果不存在就报错 models.Business.objects.get(id=1) 对象或者None = models.Business.objects.filter(id=1).first() 1234567891011

代码实例

def business(request): v1 = models.Business.objects.all() #QuerySet #[boj(id,caption,code),boj(id,caption,code)] v2 = models.Business.objects.all().values('id','caption') #QuerySet #[{'id':1,'caption':'运维部'},{}] v3 = models.Business.objects.all().values_list('id','caption') #QuerySet #[(1,运维部),(2,开发)] return render(request,'business.html',{'v1':v1,'v2':v2,'v3':v3}) def host(request): v1 = models.Host.objects.filter(nid__gt=0) # for row in v1: # print(row.nid,row.hostname,row.ip,row.port,row.b_id,row.b.code,row.b.id,sep='\t') v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption') # 在这种有filter,values,的情况下跨表取值,使用双下划线 __ # QuerySet:[{}] #字典类型数据取值 # for row in v2: # print(row['nid'],row['hostname'],row['b__caption']) v3 = models.Host.objects.filter(nid__gt=0).values_list('nid', 'hostname', 'b_id', 'b__caption') return render(request, 'host.html', {'v1': v1,'v2':v2,'v3':v3})

123456789101112131415161718192021222324252627282930'

Ajax 提交数据
模板

$.ajax({ url:'/host/', type:"POST", data:{'k1':123,'k2':"root"}, success:function(data){ // data 是服务器端返回的字符串 var obj = JSON.parse(data); } })12345678

实例

$('#add_submit_ajax').click(function () { $.ajax({ url:'/ajax_add_app/', {#data:{'user':123,'host_list':[1,2,3,4]},#} data:$('#add_form').serialize(), type:"POST", dataType:'JSON', traditional:true, success:function (obj) { console.log(obj); }, error:function () { } }) }); //建议:永远让服务器端返回一个字典 //return HttpResponse(json.dumps(字典))

123456789101112131415161718

多对多关系:

创建多对多关系,两种方式:1,自定义关系表2,自动创建关系表 123

方式一:自定义关系表

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)

123456789101112131415

方式二:自动创建关系表

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() obj.r.set([3,5,7]) # 所有相关的主机对象“列表” QuerySet obj.r.all()

12345678910111213141516171819202122232425262728293031

网址:python Django数据部分操作 https://www.yuejiaxmz.com/news/view/381858

相关内容

Python+Django二手商品网站
Python+Django二手家电销售购物平台
django+hadoop基于Python的王者荣耀战队的数据分析系统(源码+文档+调试+可视化大屏)
Python+Django二手图书交易售卖系统=含卖家
python查询数据库返回字典
基于Python+Django的二手电子产品交易平台系统设计与实现
python计算机毕设【附源码】二手书交换平台(django+mysql+论文)
python计算机毕设(附源码)校园旧物公益捐赠回收系统(django+mysql5.7+文档)
推荐一款高效能的Django异步任务解决方案:Django+Celery
python+django美食家庭健康食谱烹饪网站系统

随便看看