JSON数据将字段名称连接到值字段(Django)

时间:2016-01-25 21:06:38

标签: javascript json django

我尝试使用JSON,Django和Ajax返回一个字符串,但由于某种原因,它们的查询集导致JSON也包含了字段名称。例如,它不是仅返回字段的值,而是返回[{' field_name':value}]作为整个字符串。在控制台中,它打印出:{' field_name':" [{' field_name':value}]"}

我写的代码是:

def drugsanddoses(request):
    drugIdentifier = request.POST.get('drugID')

    drug_group = Antiepileptics.objects.get(name=drugIdentifier)
    drug_name = RiskCalculator.objects.filter(drug_name=drug_group).values('drug_name')
    l_dose = RiskCalculator.objects.filter(drug_name=drug_group).values('l_dose')   
    h_dose = RiskCalculator.objects.filter(drug_name=drug_group).values('h_dose')   
    pubmed_id = RiskCalculator.objects.filter(drug_name=drug_group).values('pubmed_id') 
    updated = RiskCalculator.objects.filter(drug_name=drug_group).values('updated') 

    data = {}

    try:
        data['drug_name'] = str(drug_name)
        data['l_dose'] = str(l_dose)
        data['h_dose'] = str(h_dose)
        data['pubmed_id'] = str(pubmed_id)
        data['updated'] = str(updated)

    except:
        raise Http404

    print(data)

    return JsonResponse(data, safe=False)

1 个答案:

答案 0 :(得分:2)

这是预期的行为,因为您正在str(queryset)查询values()。 ORM中的values将返回一个dict列表。如果您只想要值,请执行:

RiskCalculator.objects.filter(drug_name=drug_group) \
                      .values_list('drug_name', flat=True).distinct()

valuesvalues_list的Django文档。

即使这样,在每个查询上执行str()也没有意义,您根本不需要str()。因为你需要将整个python数据结构序列化为json。否则,您将很难将字符串转换为javascript中的值列表。