首页 > 解决方案 > 如何检索特定的 JSON 数据

问题描述

我想在选择选项表单后检索特定数据。当我选择时,我得到了无法分离的 JSON 格式的数据。我试过 obj.purchase_price 但未定义。我的以下代码提供以下数据

           [{"model": "acc.productdetails", "pk": 4, "fields": {"purchase_price": "214.00"}}]

我想要我的表单的 purchase_price 值。请帮我分开价值。我的代码如下

在视图中

    def priceFilter(request):
        product_id = request.GET.get('product_id',None)

        price = {
                
             'data':serializers.serialize("json",ProductDetails.objects.filter(id=product_id),
              fields=('purchase_price',))
                }

        return JsonResponse(price) 

在我的页面中,脚本

        <script>
                $("#id_price").change(function () {
                var form = $(this).closest("form");
                $.ajax({
                 url: form.attr("data-validate-price-url"),
                 data: form.serialize(),
                 dataType: 'json',
                 success: function (price) {
                        if (price.data) {
                        let obj = price.data ;
                        alert(obj) ;

                        }
                       }
                     });

                   });
       </script>

我想在这里显示我的数据

       <input type="text" name="price" class="form-control" id="p_price" required>

标签: jsondjango

解决方案


序列化程序返回一个字符串,它是一个 JSON blob,而不是带有字典的列表等。

您可以将结果包装在字典中:

from django.shortcuts import get_object_or_404

def priceFilter(request):
    product_id = request.GET.get('product_id')
    product = get_object_or_404(Product.objects.only('price'), id=product_id)
    price = {
        'price': product.price
    }
    return JsonResponse(price)

在响应中,您可以使用以下命令检索对象:

success: function (data) {
    if (data.price) {
        let obj = data.price;
        alert(obj) ;
    }
}

注意:通常最好使用get_object_or_404(…)[Django-doc],然后直接使用.get(…)[Django-doc]。如果对象不存在,例如因为用户自己更改了 URL,get_object_or_404(…)将导致返回HTTP 404 Not Found响应,而 using .get(…)将导致HTTP 500 Server Error


推荐阅读