Объединение двух моделей и группировка с помощью SUM в Django
У меня есть две модели ProductDetails и InventorySummary. Я хочу объединить эти две модели и хочу сгруппировать по названию товара и количеству товара SUM. Количество должно быть умножено на цену продукта. Мои модели приведены ниже:
class ProductDetails(models.Model):
id = models.AutoField(primary_key=True)
product_name = models.CharField(max_length=100, unique=True)
purchase_price = models.DecimalField(max_digits=7, decimal_places=2)
dealer_price = models.DecimalField(max_digits=7, decimal_places=2)
retail_price = models.DecimalField(max_digits=7, decimal_places=2)
remarks = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.product_name
class InventorySummary(models.Model):
id = models.AutoField(primary_key=True)
date = models.DateField(default=date.today)
product_name = models.ForeignKey(ProductDetails, on_delete=models.CASCADE)
quantity = models.IntegerField()
def __str__(self):
return str(self.product_name)
Мои взгляды приведены ниже:
def stockPrice(request):
stock = InventorySummary.objects.select_related('product_name').
values('product_name').annotate(quantity=Sum('quantity'))
return render(request, 'inventory_price.html', {'stock': stock})
Я могу достичь этого с помощью выражения F. Я не уверен, что вы подразумеваете под "ценой продукта", поэтому я взял purchase_price
:
from django.db.models import Sum, F
stock = (
InventorySummary.objects.values("product_name__product_name")
.order_by("product_name__product_name")
.annotate(quantity=Sum(F("product_name__purchase_price") * F("quantity")))
)