【问题标题】:How to get data from parent table through child table如何通过子表从父表中获取数据
【发布时间】:2021-08-18 13:45:44
【问题描述】:

我想获取已订购并存储在 OrderItem 表中的所有产品名称,并且我想按产品名称对它们的数量组求和。救命!!!

这是我的桌子。

class m_Product(models.Model):
name = models.CharField(max_length=200)
Brand = models.CharField(max_length=200)
quantity = models.IntegerField(default=0, null=True, blank=True)
price = models.DecimalField(max_digits=7, decimal_places=2)
digital = models.BooleanField(default=False, null=True, blank=True)
image = models.ImageField(null=True, blank=True)
description = models.CharField(max_length=2000)
tags = models.CharField(max_length=20)


class OrderItem(models.Model):
product = models.ForeignKey(
    m_Product, on_delete=models.SET_NULL, null=True)
order = models.ForeignKey(
    Prescription, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)


s = m_Product.objects.select_related('orderitem').filter('name').values('quantity').annotate(sum = Sum('quantity'))

【问题讨论】:

  • 产品有唯一的名称吗?

标签: python-3.x django django-models django-views


【解决方案1】:

您可以使用相关quantitys 的Sum 和相关OrderItems 的Sum 注释m_PRoduct

from django.db.models import Sum

m_Product.objects.annotate(
    total_ordered=Sum('orderitem__quantity')
)

由此产生的m_Products 将有一个额外的属性.total_ordered,其中包含相关OrderItems 的quantity 的总和。

这还将包含根本未订购的m_Products。我们可以省略这些产品:

from django.db.models import Sum

m_Product.objects.filter(
    orderitem__isnull=False
).annotate(
    total_ordered=Sum('orderitem__quantity')
)

如果产品没有唯一的名称,则意味着相同的产品名称可以多次出现不同的total_ordered。但通常这不是问题:我们想知道一个产品的订单总量,而不是同名产品的订单总量,因为有时同名产品会有不同的产品。

如果您真的想获得每个产品名称的数量总和,我们可以使用:

from django.db.models import Sum

m_Product.objects.values('name').filter(
    orderitem__isnull=False
).annotate(
    total_ordered=Sum('orderitem__quantity')
).order_by('name')

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多