回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我刚刚向DJango视图发出了一个ajax请求,它返回了数据,但我不知道如何只获取我想要的字段。在</p>
<p>这是我的观点:</p>
<pre><code>if request.method == 'POST':
txt_codigo_producto = request.POST.get('codigobarras_producto')
response_data = {}
resp_producto=Producto.objects.all().filter(codigobarras_producto=txt_codigo_producto)
resp_inventario=InventarioProducto.objects.all().filter(producto_codigo_producto__in=resp_producto).order_by('-idinventario_producto')[:1]
resp_precio=Precio.objects.all().filter(producto_codigo_producto__in=resp_producto,estado_precio=1).order_by('-idprecio')[:1] #
response_data['codprod']=serializers.serialize('json', list(resp_producto), fields=('codigo_producto'))
response_data['inventario']=serializers.serialize('json', list(resp_inventario), fields=('idinventario_producto'))
response_data['nombre']=serializers.serialize('json', list(resp_producto), fields=('nombre_producto'))
response_data['valorprod']=serializers.serialize('json', list(resp_precio), fields=('valor_precio'))
return HttpResponse(
json.dumps(response_data),
content_type="application/json"
)
</code></pre>
<p>“json”是我从视图获得的作为响应的数组的名称,我将其发送到控制台,如下所示:</p>
^{pr2}$
<p>我明白了:</p>
<pre><code>{"codprod":"[{\"model\": \"myapp.producto\", \"fields\": {}, \"pk\": 1}]",
"nombre":"[{\"model\": \"myapp.producto\", \"fields\": {\"nombre_producto\": \"Pantal\\u00f3n de lona \"}, \"pk\": 1}]",
"valorprod":"[{\"model\": \"myapp.precio\", \"fields\": {\"valor_precio\": \"250.00\"}, \"pk\": 1}]",
"inventario":"[{\"model\": \"myapp.inventarioproducto\", \"fields\": {}, \"pk\": 1}]"}
</code></pre>
<p>我试过了:</p>
<pre><code>console.log(JSON.stringify(json.codprod));
</code></pre>
<p>这样我就知道了:</p>
<pre><code>"[{\"model\": \"myapp.producto\", \"fields\": {}, \"pk\": 1}]"
</code></pre>
<p>但是如果我尝试类似<code>json.codprod.pk</code>或<code>json.codprod[0]</code>或{<cd3>}我会在控制台中得到{<cd4>}。在</p>
<p>我想知道如何访问这些字段,在“valorbrod”中我想要“valor_precio”值,所以它必须是“250.00”,在“nombre”中,我想要“nombre_producto”的值必须是“Pantal\u00f3n de lona”。在</p>
<p>希望你能给我个提示。我认为这是一个JSON语法问题,但我是新手。在</p>
<hr/>
<p>按照<code>Piyush S. Wanare</code>和<code>Roshan</code>说明,我对视图进行了一些更改:</p>
<pre><code> resp_producto=Producto.objects.filter(codigobarras_producto=txt_codigo_producto)
resp_inventario=InventarioProducto.objects.filter(producto_codigo_producto__in=resp_producto).order_by('-idinventario_producto')[:1].only('idinventario_producto')
resp_precio=Precio.objects.filter(producto_codigo_producto__in=resp_producto,estado_precio=1).order_by('-idprecio')[:1].only('valor_precio')
resp_productonombre=Producto.objects.filter(codigobarras_producto=txt_codigo_producto).only('nombre_producto')
resp_productocodigo=Producto.objects.filter(codigobarras_producto=txt_codigo_producto).only('codigo_producto')
response_data = {'codprod': resp_productocodigo,'inventario':resp_inventario,'nombre':resp_productonombre,'valorprod':resp_precio}
return HttpResponse(
json.dumps(list(response_data)),
content_type="application/json"
)
</code></pre>
<p>但我在控制台中得到空字段:</p>
<pre><code>["nombre","valorprod","codprod","inventario"]
</code></pre>
<hr/>
<p>另一个编辑,以及有效的代码:</p>
<p>我使用的视图与开始时一样,使用了双重编码,我刚刚删除了“codprod”部分,但我在ajax响应代码上写了以下内容:</p>
<pre><code>var res_valorprod=JSON.parse(json.valorprod);
var res_inventario=JSON.parse(json.inventario);
var res_nombre=JSON.parse(json.nombre);
var campos_valorprod =res_valorprod[0].fields;
var campos_nombre =res_nombre[0].fields;
console.log(res_nombre[0].pk);
console.log(campos_valorprod.valor_precio);
console.log(res_inventario[0].pk);
console.log(campos_nombre.nombre_producto);
</code></pre>
<p>这是可行的,我得到了我想要的,但是如果您知道一些更好的方法来访问多个嵌套的JSON字段,我将很高兴知道它。用户<code>dsgdfg</code>给了我一个提示。在</p>