【问题标题】:Populate html element from selected dropdown value in Django从 Django 中的选定下拉值填充 html 元素
【发布时间】:2016-04-29 09:51:14
【问题描述】:

我对 django 和 AJAX 非常陌生,我正在尝试使用下拉菜单中的数据填充 HTML 元素(暂时是跨度)。

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

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")

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

【问题讨论】:

    标签: javascript ajax django django-views


    【解决方案1】:

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

    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 never catch all exceptions。

    【讨论】:

    • 我认为这可能是问题,但是当我尝试它时,它返回一个空的 [] 数组...
    • 仔细观察,我发现您没有正确访问 JSON 数据。相应地编辑了回复。
    • 我已经实现了这些更改,但是我不确定如何正确使用 JsonResponse。是不是很简单:return JsonResponse(response_data, encoder=DjangoJSONEncoder, safe=False, json_dumps_params=None)
    • 可以,也可以直接传drugInfo,跳过JS成功函数中的间接。
    • 我似乎收到错误消息:“JSONDecodeError: Expecting value: line 1 column 1 (char 0)”
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多