Sunday, December 6, 2020

Cant output the value of the foreign key via jsonresponse serealize

Hi Mates,

I want to get json serialized the name of the products insted of the id ones. I tried to add natural_keys method on the parent model with no luck.

I can receive the json data good but in this way:

[{"model": "ocompra.compradetail", "pk": 1, "fields": {"producto": 238, "precio": "620.00", "cantidad": 1}}, {"model": "ocompra.compradetail", "pk": 2, "fields": {"producto": 17, "precio": "65.00", "cantidad": 2}}]

Any suggestions will be much appreciated!

Thanks,


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); } }); });  

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/01da8ed7-d487-4ae5-88cc-1ecf4ed0d96dn%40googlegroups.com.

No comments:

Post a Comment