如何使用 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
),我们只是用__
将它和我们要求和的字段名分开。
我需要将所有不同产品的“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
),我们只是用__
将它和我们要求和的字段名分开。