如何使用 ORM 查询对同一产品的产品 _Volume 值求和

How to Sum same product's product _Volume value at with ORM-Query

我需要将所有不同产品的“product_volume”合而为一,为此我的模型是

class Product(BaseModel, models.Model):
    name = models.CharField(max_length=256)
    category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL, related_name='product_category')
    description = models.CharField(max_length=1000)
    hs_code = models.CharField(max_length=256, unique=True)
    photo = models.ImageField(upload_to='media/product/%Y/%M/', null=True, blank=True)
    production_unit = models.ForeignKey(MeasurementUnit, related_name='product_unit', null=True, blank=True, on_delete=models.SET_NULL)


class Production(BaseModel, models.Model):
    product = models.ForeignKey(Product, related_name='production_product', on_delete=models.CASCADE)
    district = models.ForeignKey(DistrictLevel, related_name='production_district', on_delete=models.CASCADE)
    production_volume = models.FloatField()
    production_year = models.ForeignKey(FiscalYear, related_name='production_year', null=True, blank=True, on_delete=models.SET_NULL)
    seasons = models.ManyToManyField(Season)


在这里,我想做的是,产品 product_volume 的总和就像, product1, product_volume=20 product2, product_volume = 40 product1, product_volume = 60

在我的table中我需要显示

product1, product_volume = 80 product2, product_volume = 40

这是我的 table

我通过使用 for 循环得到了结果,但是,有没有使用 ORM 的更好的解决方案。

对不起我的英语,我的英语有点弱

可以使用Sum aggregation function [Django docs]注释字段的总和:

products = Product.objects.annotate(total_production_volume=Sum('production_product__production_volume'))

for product in products:
    print(product.name, product.total_production_volume)

这里production_product是你为字段设置的相关名称(这个名字很奇怪product.production_product感觉不太好吧?也许相关名称会更好productions),我们只是用__将它和我们要求和的字段名分开。