2012-03-29 78 views
0

考虑这些伪模式:Django的ORM对象计数

class BaseProduct: 
    quantity_available = Integer 

class Box(BaseProduct): 
    items_in_box = Integer 

>> BaseProduct.objects.count() 
>> Integer 

但我怎么检索产品的总数量,因此:

for each object[quantity_available * items_in_box] * total_objects 

解决方法:

我使用西面维瑟的“总和'作为部分解决方案,将属性添加到基类:

@property 
def _box_count(self): 
    try: 
     return self.items_in_box * self.quantity_available 
    except AttributeError: 
     return self.quantity_available 

sum([item._box_count for item in BaseProduct.objects.all()]) 
+0

我不明白。你在找盒子的总数,还是总数? “items_in_box”和“quantity_available”如何相关? – 2012-03-29 14:16:27

+0

如何管理数据库中从'BaseProduct'到'Box'的继承?您是否使用文档中列出的方法之一? https://docs.djangoproject.com/zh/dev/topics/db/models/#model-inheritance – 2012-03-29 14:20:10

+0

BaseProduct有一个quantity_available字段(整数)。 Box是来自BaseProduct的继承,Box也可以容纳X产品。假设你卖伞,每件和每箱。我想要伞的总存量 – 2012-03-29 14:22:29

回答

1

尝试以下操作:

sum([box.quantity_available * box.items_in_box for box in Box.objects.all()] 

它检索所有的箱子和每个盒子,它计算可用的那个盒子次项目中该类型的箱数的quanitity。最后,它汇总所有这些值,以便获得产品的总数。

+0

这似乎是务实的做法,我选择了一个属性到模型虽然,谢谢 – 2012-03-30 08:49:58