【发布时间】:2021-03-18 02:20:55
【问题描述】:
我想将 json 序列化为 id 的产品名称。我尝试在父模型上添加 natural_keys 方法,但没有成功。
我可以很好地接收到json数据但是这样:
[{"model": "ocompra.compradetail", "pk": 1, "fields": {"producto": 238, "precio": "620.00", "cantidad": 1}}, {"模型”:“ocompra.compradetail”,“pk”:2,“字段”:{“producto”:17,“precio”:“65.00”,“cantidad”:2}}]
任何建议将不胜感激!
谢谢,
views.py
def detalle(request):
template_name = "ocompra/compra_ok.html"
contexto={}
data={}
if request.method=="GET":
cat = CompraDetail.objects.all().order_by("codigo")
contexto={"obj":cat}
if request.method=="POST":
codigos=request.POST.getlist("codigos[]")#Codigo/s de la Orden de Compra
codigos= [int(x) for x in codigos]#Convierte la lista en integer
items_detalle = CompraDetail.objects.filter(compra__in=codigos).select_related('producto')
for item in items_detalle:
print(item.producto.nombre, item.cantidad, item.precio, item.subtotal)
#data['success'] = True
#print (data)
return JsonResponse(serializers.serialize('json', items_detalle,fields=('producto', 'cantidad','precio'), use_natural_foreign_keys=True), safe=False)
#return JsonResponse(data)
return render(request,template_name,contexto)
models.py
from django.db import models
from django.utils.timezone import datetime
from articulos.models import Articulos
# Create your models here.
class CompraHead(models.Model):
numero=models.AutoField(primary_key=True)
cliente= models.CharField(max_length=200,default="Consumidor Final")
direccion=models.CharField(max_length=100,null=True,blank=True)
telefono=models.CharField(max_length=50,null=True,blank=True)
fecha=models.DateField(default=datetime.now)
observaciones=models.CharField(max_length=400)
subtotal=models.DecimalField(default=0.00,max_digits=9,decimal_places=2)
descuento=models.IntegerField(default=0.0)
total=models.DecimalField(default=0.00,max_digits=9,decimal_places=2)
class CompraDetail(models.Model):
compra=models.ForeignKey(CompraHead,on_delete=models.CASCADE)
producto=models.ForeignKey(Articulos,on_delete=models.CASCADE)
precio= models.DecimalField(max_digits=10,decimal_places=2)
cantidad=models.IntegerField(default=0)
subtotal=models.DecimalField(default=0.00,max_digits=9,decimal_places=2)
def natural_key(self):
return (self.producto.nombre)
js
var token = '{{csrf_token}}';
var data = JSON.stringify({"codigos":codigos});
data = {"codigos[]":codigos};
console.log(data);
$.ajax({
headers: { "X-CSRFToken": token },
"url": '/ocompra/detalle/',
"type": "POST",
"dataType": "json",
data: data,
success: function(data){
// if(data['success']){
//location.reload(true);
// alert(data)
// alert("Se actualizo correctamente.");
//}
alert(data)
var obj = JSON.parse(data);
for (i in obj)
alert('Producto: '+obj[i].fields.producto +'\n' + 'Cantidad: '+ obj[i].fields.cantidad +'\n' + 'Precio: '+obj[i].fields.precio )
},
error: function(a,b,c){
alert(c);
}
});
});
【问题讨论】:
标签: json django ajax foreign-keys json-deserialization