在Django中从选定的下拉列值中填充html元素

时间:2016-01-22 17:35:09

标签: javascript ajax django django-views

我是django和AJAX的新手,并尝试使用下拉菜单中的数据填充HTML元素(暂时)。

我目前的方法是通过<option>元素中的id标记获取行的唯一ID,并将其与AJAX一起发布到views.py,然后将该ID用作Django中的过滤器以获取相应的行。但是,出于某种原因,每当我尝试过滤查询时,都不会返回任何内容。每当我删除过滤器时,所有的值都会被解析,这让我觉得我以某种方式错误地过滤了过滤器。我尝试了很多不同的过滤器类型,但我似乎无法做到这一点。

HTML是:

<select id="drugSet">
{% for dose in dose_set %}
<option id="{{ dose.pubmed_id }}">{{ dose.drug_name }}</option>
{% endfor %}
</select>

<span id="drugName"></span>    
<a href="javascript:NeedDrugInformation()">Retrieve data</a>

Javascript和AJAX是:

function NeedDrugInformation() {
        var elementID = document.getElementById("drugSet");
        var drugID = String(elementID.options[elementID.selectedIndex].id);

        $.ajax({
            type: "POST",
            url: "drugsanddoses/",
            dataType: "json",
            async: true,
            data: { csrfmiddlewaretoken: '{{ csrf_token }}', drugID: drugID },
            success : function(json) {
            },
            error : function(xhr,errmsg,err) {
            }
        });

        $.ajax({
            type: "GET",
            url: "drugsanddoses",
            dataType: "json",
            async: true,
            data: { csrfmiddlewaretoken: '{{ csrf_token }}' },
            success: function (json) {
                $('#drugName').html(json.drugInfo);
                // $('.ajaxProgress').hide();
            }
        })
    }

Views.py:

def drugsanddoses(request):

    drugID = request.POST.get('drugID')

    drugInfo = RiskCalculator.objects.filter(pubmed_id='drugID').values('drug_name', 'l_dose', 'h_dose', 'risk', 'pubmed_id', 'updated')    
    response_data = {}

    try:
        response_data['drugInfo'] = str(drugInfo)
    except: 
        response_data['result'] = 'No details found'
        response_data['message'] = 'There is currently no information in the database for this drug.'

    return HttpResponse(json.dumps(response_data), content_type="application/json")

正如我所说,我对此非常陌生。任何指针或方法,我可以做得更好,将非常感激。

1 个答案:

答案 0 :(得分:0)

首先,POST字段包含表单发布的值,而不是JSON。首先解析Json有效载荷:

import json
drugID = json.loads(request.body).get('drugID')

其次,您在过滤器中使用字符串'drugID'而不是变量drugID中的值。尝试将查询行更改为:

drugInfo = RiskCalculator.objects.filter(pubmed_id=drugID).values('drug_name', 'l_dose', 'h_dose', 'risk', 'pubmed_id', 'updated')

您还应该使用JsonResponse永远不会捕获所有异常。