django获取数据库数据并设置select下拉框当前值。

问题场景:

Django开发,有后台数据对象info,要select下拉框中设置从数据库中读出来的值info.credit为当前值。


解决分析

  • 方法:要设置下拉框的当前值,要通过js实现,将select的某个值设为选中,可以通过改对应的selected属性为selected,也可以用jquery框架直接将值为某个值的选项设为选中。

  • 取值:但是在js里面要的获取后台数据库的数据有三种途径:

在后台往模板中的js代码块部分填入后台数据。

js中的代码,{{后台填入的值}}或者写进val中不用赋值给变量,第二句是用jQuery框架直接获取元素的,设它的当前值
var credit={{info_credit | safe }}
$("#id_selector").val(credit);
#django中的代码
def get_info(request):
	obj_info=ModuleInfo.objects.get(xxx_id=xxx_id)#查询数据库得到一个结果集变量
	return render(request,'模板.html',{'info':obj_info,‘info_credit’:json.dumps(obj_info.credit)})

在js函数里通过ajax请求获得json数据给js变量赋值

var credit=0
$.ajax({
            url: "/ajax_query_credit/",
            type: "POST",
            data: {"info_id": '0'},
            success: function (response) {
                credit=response['credit']
            },
            dataType: 'json',
        });
#后台
def ajax_query_credit(request):
	id_info=request.POST.get('id_info')
	obj_info=ModuleInfo.objects.get(id_info=id_info)#查询数据库得到一个结果集变量
	return HttpResponse(json.dumps({'credit':id_info.credit}))

从html文件中获取对应元素的值

由于后台传入的是一个对象info,非json数据,在html中是{{info.credit}}直接取的,在js中不行,要为json数据。
(由于不想在后台传的参数中额外加入一个json化的info.credit)所以,这里在js里搞了个小操作。
在js中获取html模板中的已经填好的值,再将html的{{info.credit}}给隐藏掉。
html:<p id="hide_credit"  hidden>{{info.credit}}</p>
js:
 $("#id_credit_selector").val($("#hide_language").text());

  • 注意:写入js中的要是json数据,所以写入js的数据后台要转化字典值为json。还有在views中写好了功能函数记得在urls.py绑定url请求哦,格式path('/xxx/',views.xxx),。我用的是最后一种,用哪种根据具体情况而定。