从模型管理器返回计算值?

时间:2016-06-04 03:36:55

标签: django

我尝试计算材料模型的总计 这些总数存储在不同的表中,如Inventory,PO,SO

出于这个原因,我决定在Material model manager

中进行聚合
class MaterialInventoryManager(models.Manager):
    def total_active_inventory(self):
        return self.get_queryset().annotate(total_inventory=Sum('inventory__quantity')).filter(is_active = True)


class Material(models.Model):
    version = IntegerVersionField( )
    code = models.CharField(max_length=30)
    name = models.CharField(max_length=30)
    description = models.TextField(null=True, blank=True)
    materialuom = models.CharField(max_length=1,
                              choices=UOM_CHOICES)
    creation_time = models.DateTimeField(auto_now_add=True, blank=True)
    total_inventory =  MaterialInventoryManager()
    objects = MaterialInventoryManager()


@with_author 
class Inventory(models.Model): 
    material =  models.OneToOneField('item.Material',null=True, blank=True)
    # material_UOM =  models.OneToOneField('item.UOM_BINUOM',null=True, blank=True)
    warehouse_Bin =  models.ForeignKey(WarehouseBin)
    is_active = models.BooleanField(default=True)
    quantity =  models.DecimalField(max_digits=8, decimal_places=5)
    creation_time = models.DateTimeField(auto_now_add=True, blank=True)

当我从shell执行Material.total_inventory() 我正进入(状态  enter image description here 为什么我没有得到总价值?

1 个答案:

答案 0 :(得分:1)

试试这个

return self.get_queryset()
.filter(is_active = True)
.aggregate(total_inventory=Sum('inventory__quantity'))
.get('total_inventory')
相关问题