2010-11-01 74 views
0

我是Django的新手,我想了解如何使用經理。我已閱讀文檔,但需要一些幫助才能將其付諸實踐。Django:模型經理的新手問題

我有型號如下:

class Place(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=300) 
class PlaceRef(models.Model): 
    place = models.ForeignKey(Place) 
    entry = models.ForeignKey(Entry) 
    value = models.FloatField() 
    units = models.CharField(max_length=30) 

如果我有一個特別的Place,我應該使用管理器添加了與此相關的所有PlaceRefs的價值? (爲了簡單起見,假定所有單元都是相同的...)

place = Place.objects.get(id=id) 
value = PlaceRef.objects... # what to do here? 

回答

1

這裏不需要新的管理員。已經有一個自動管理器處理Place和PlaceRef之間的關係 - 它可以通過place.placeref_set訪問。

但要合計這些值,您需要使用aggregation - 具體而言,就是aggregate方法。

from django.db.models import Sum 
value = place.placeref_set.aggregate(Sum('value')) 

現在value是與含在相關PlaceRefs所有值的總和的單個值的字典。

1

您也可以將其添加爲地方

class Place(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=300) 

    @property 
    def placeref_total(self): 
     do your calculation here as suggested in Daniel's answer 
     value = self.placeref_set.aggregate(Sum('value')) 
     return value 

那麼你可以參考它在你的代碼中的屬性:

myplace = Place.objects.get(id=x) 
    myplace.placeref_total 

如果不使用@property裝飾,然後請參閱: myplace.placeref_total()