es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Calcular Subtabla Django

Soy un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.

Soy nuevo en Django, intento calcular una subtabla de una tabla relacionada. Tengo dos modelos Transaction y Detail. Aquí están mis modelos:

    class Transaction(models.Model):
        id = models.UUIDField(primary<em>key=True, default=uuid.uuid4, editable=False)
        code = models.CharField(max</em>length=50)

class Detail(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    transaction = models.ForeignKey(Transaction, related_name='details', on_delete=models.CASCADE)
    qty = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False)

Quiero obtener la suma del cálculo (Detail.qty * Detail.price) en una sola consulta como esta:

datas = Transaction.objects.all().annotate(sum=sum(qty*price))

¿Cómo puedo hacer eso en ORM de Django?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para calcular la sub-tabla de una tabla relacionada usando Django ORM, se puede utilizar el método annotate junto con la función Sum. Aquí le mostramos cómo puede modificar su código para lograr el resultado deseado:

    from django.db.models import Sum
    
    datas = Transaction.objects.annotate(sum=Sum('details__qty' * 'details__price'))
    

    El método annotate agrega el campo sum a cada objeto Transaction en la queryset. La función Sum realiza el cálculo de qty * price en cada objeto relacionado de Detail y devuelve la suma total para cada Transaction.

    Tenga en cuenta que utilizamos las búsquedas details__qty y details__price en la función Sum para acceder a los campos relacionados del modelo Detail. La sintaxis de doble subrayado le permite recorrer relaciones y acceder a sus campos en una consulta.

Comments are closed.