2012-03-29 37 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