2010-11-01 41 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()