Объединение двух моделей и группировка с помощью 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")))
)
Вернуться на верх