Cómo intersectar dos conjuntos de consultas en Django?
Tengo dos consultas. Una de ellas tiene el identificador de producto vendido y el monto de venta, la otra tiene el identificador de producto y el precio del producto.
query_product = Model1.objects.filter(...).values_list('ProductID', 'ProductPrice')
query_sale = Model2.objects.filter(...).values_list('SaleProductID', 'ProductAmount')
Quiero calcular SI SaleProductID = ProductID, Sum(F(‘ProductPrice’) * F(‘ProductAmount’)). Sin embargo, no pude encontrar cómo hacerlo con la consulta. Nota: Model2 tiene una clave externa en Model1.
¿Tienes alguna sugerencia? ¡Gracias!
EDIT: Quiero mostrar el monto total en el sitio de administración en la clase PBGelenSiparis. Aquí está el modelo completo traducido:
class PBUrun(models.Model):
PBUrunNu = models.IntegerField(verbose_name='Código del producto')
PBUrunName = models.CharField(verbose_name='Nombre del producto', max_length=200)
PBUrunPrice = models.DecimalField(verbose_name='Precio del producto', max_digits=10, decimal_places=2)
class PBGelenSiparis(models.Model):
pburun = models.ForeignKey(PBUrun, verbose_name='Seleccionar producto', on_delete=models.CASCADE)
PBGelSipNu = models.AutoField(verbose_name='Número de orden', primary_key=True)
def GelenSiparisTutari(self):
find_ordered_products = PBGelenSiparisUrun.objects.filter(pbgelensiparis_id=self.PBGelSipNu)\
.values('pburun_id')
order_product_price = PBUrun.objects.filter(PBUrunNu__in=siparis_urunlerini_bul).values_list('PBUrunNu', 'PBUrunFiyat')
order_product_amount = PBGelenSiparisUrun.objects.filter(pbgelensiparis_id=self.PBGelSipABNu).values_list('pburun_id', 'PBGelSipUrunAdet')
class PBGelenSiparisUrun(models.Model):
pburun = models.ForeignKey(PBUrun, verbose_name='Seleccionar producto', on_delete=models.CASCADE)
pbgelensiparis = models.ForeignKey(PBGelenSiparis, verbose_name='Orden', on_delete=models.CASCADE)
PBGelSipUrunAdet = models.IntegerField(verbose_name='Cantidad de la orden')
davy.ai
Para calcular la cantidad total de productos vendidos, puedes utilizar la siguiente consulta:
Esta consulta filtra las instancias de
Model2
dondeSaleProductID
es igual aProductID
, y luego anota cada instancia con un campototal_sale
que es el resultado de multiplicarProductPrice
yProductAmount
. Finalmente, la consulta devuelve una lista de tuplas que consisten en los valores deSaleProductID
ytotal_sale
.En tu caso, puedes incorporar esta consulta en el método
GelenSiparisTutari
de la clasePBGelenSiparis
para calcular la cantidad total de productos ordenados:Esta implementación primero encuentra todos los productos ordenados, luego calcula la cantidad total para cada producto utilizando la consulta que hemos definido. Finalmente, suma todas las cantidades para obtener el monto total del pedido.